From 72e2d1d2201c2da23777d8fb89e078475e0c1371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 27 Dec 2022 00:02:02 +0300 Subject: [PATCH] MDEV-25004 Refactorings * Avoid some pessimization * Slightly smaller upgrade dataset * Simplify vers_row_same_trx() and its caller --- mysql-test/std_data/versioning/ibdata1.gz | Bin 51165 -> 41597 bytes mysql-test/suite/innodb_fts/t/versioning.test | 7 +- storage/innobase/row/row0ins.cc | 91 ++++++++---------- storage/innobase/row/row0merge.cc | 28 +++--- 4 files changed, 59 insertions(+), 67 deletions(-) diff --git a/mysql-test/std_data/versioning/ibdata1.gz b/mysql-test/std_data/versioning/ibdata1.gz index bddd23071818c9ca92dc141700240b2d4242b247..345217ba5931bd8a61f5c2dbc03d65059892a8d6 100644 GIT binary patch literal 41597 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 literal 51165 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

C2)~{vK2P!}8B_X5Z<3 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 yN&qE*5table); ut_ad(index != clust_index); mtr.start(); - rec_t *clust_rec= - row_get_clust_rec(BTR_SEARCH_LEAF, rec, index, &clust_index, &mtr); - rec_offs offsets_[REC_OFFS_NORMAL_SIZE]; - rec_offs *clust_offs= offsets_; - rec_offs_init(offsets_); - mem_heap_t *heap= NULL; - - if (clust_rec) + if (const rec_t *clust_rec= + row_get_clust_rec(BTR_SEARCH_LEAF, rec, index, &clust_index, &mtr)) { + rec_offs offsets_[REC_OFFS_NORMAL_SIZE]; + rec_offs *clust_offs= offsets_; + rec_offs_init(offsets_); + mem_heap_t *heap= NULL; + clust_offs= - rec_get_offsets(clust_rec, clust_index, clust_offs, - clust_index->n_core_fields, ULINT_UNDEFINED, &heap); - if (!clust_index->vers_history_row(clust_rec, clust_offs)) + rec_get_offsets(clust_rec, clust_index, clust_offs, + clust_index->n_core_fields, ULINT_UNDEFINED, &heap); + if (clust_index->vers_history_row(clust_rec, clust_offs)) { - *same_trx= false; - goto end; + ulint trx_id_len; + const byte *trx_id= rec_get_nth_field(clust_rec, clust_offs, + clust_index->n_uniq, &trx_id_len); + ut_ad(trx_id_len == DATA_TRX_ID_LEN); + + if (trx.id == trx_read_trx_id(trx_id)) + ret= DB_FOREIGN_DUPLICATE_KEY; } + + if (UNIV_LIKELY_NULL(heap)) + mem_heap_free(heap); } else { @@ -2099,21 +2108,8 @@ dberr_t vers_row_same_trx(dict_index_t* index, const rec_t* rec, " of table " << index->table->name << " is out of sync"; ut_ad("secondary index is out of sync" == 0); ret= DB_TABLE_CORRUPT; - goto end; } - trx_id_bytes= rec_get_nth_field(clust_rec, clust_offs, - clust_index->n_uniq, &trx_id_len); - ut_ad(trx_id_len == DATA_TRX_ID_LEN); - - trx_id= trx_read_trx_id(trx_id_bytes); - - if (UNIV_LIKELY_NULL(heap)) - mem_heap_free(heap); - - *same_trx= thr_get_trx(thr)->id == trx_id; - -end: mtr.commit(); return ret; } @@ -2141,9 +2137,6 @@ row_ins_scan_sec_index_for_duplicate( ulint n_fields_cmp; btr_pcur_t pcur; dberr_t err = DB_SUCCESS; - dberr_t err2; - bool same_trx; - ulint allow_duplicates; rec_offs offsets_[REC_OFFS_SEC_INDEX_SIZE]; rec_offs* offsets = offsets_; DBUG_ENTER("row_ins_scan_sec_index_for_duplicate"); @@ -2181,7 +2174,7 @@ row_ins_scan_sec_index_for_duplicate( : BTR_SEARCH_LEAF, &pcur, mtr); - allow_duplicates = thr_get_trx(thr)->duplicates; + trx_t* const trx = thr_get_trx(thr); /* Scan index records and check if there is a duplicate */ @@ -2202,7 +2195,7 @@ row_ins_scan_sec_index_for_duplicate( if (flags & BTR_NO_LOCKING_FLAG) { /* Set no locks when applying log in online table rebuild. */ - } else if (allow_duplicates) { + } else if (trx->duplicates) { /* If the SQL-query will update or replace duplicate key we will take X-lock for @@ -2239,20 +2232,14 @@ row_ins_scan_sec_index_for_duplicate( err = DB_DUPLICATE_KEY; - thr_get_trx(thr)->error_info = index; + trx->error_info = index; - if (index->table->versioned()) { - err2 = vers_row_same_trx(index, rec, - thr, &same_trx); - if (err2 != DB_SUCCESS) { - err = err2; - goto end_scan; - } - - if (same_trx) { - err = DB_FOREIGN_DUPLICATE_KEY; - goto end_scan; - } + if (!index->table->versioned()) { + } else if (dberr_t e = + vers_row_same_trx(index, rec, + *trx)) { + err = e; + goto end_scan; } /* If the duplicate is on hidden FTS_DOC_ID, diff --git a/storage/innobase/row/row0merge.cc b/storage/innobase/row/row0merge.cc index 415c93a9f6f..89c10320365 100644 --- a/storage/innobase/row/row0merge.cc +++ b/storage/innobase/row/row0merge.cc @@ -455,9 +455,10 @@ row_merge_buf_redundant_convert( @param[in] new_table new table @param[in,out] psort_info parallel sort info @param[in,out] row table row -@param[in] history_row row is historical in a system-versioned table @param[in] ext cache of externally stored column prefixes, or NULL +@param[in] history_fts row is historical in a system-versioned table + on which a FTS_DOC_ID_INDEX(FTS_DOC_ID) exists @param[in,out] doc_id Doc ID if we are creating FTS index @param[in,out] conv_heap memory heap where to allocate data when @@ -478,8 +479,8 @@ row_merge_buf_add( const dict_table_t* new_table, fts_psort_t* psort_info, dtuple_t* row, - const bool history_row, const row_ext_t* ext, + const bool history_fts, doc_id_t* doc_id, mem_heap_t* conv_heap, dberr_t* err, @@ -542,7 +543,7 @@ error: : NULL; /* Process the Doc ID column */ - if (!v_col && index->table->fts && (*doc_id || history_row) + if (!v_col && (history_fts || *doc_id) && col->ind == index->table->fts->doc_col) { fts_write_doc_id((byte*) &write_doc_id, *doc_id); @@ -594,7 +595,7 @@ error: /* Tokenize and process data for FTS */ - if (!history_row && (index->type & DICT_FTS)) { + if (!history_fts && (index->type & DICT_FTS)) { fts_doc_item_t* doc_item; byte* value; void* ptr; @@ -1707,7 +1708,6 @@ row_merge_read_clustered_index( char new_sys_trx_end[8]; byte any_autoinc_data[8] = {0}; bool vers_update_trt = false; - bool history_row = false; DBUG_ENTER("row_merge_read_clustered_index"); @@ -1897,6 +1897,7 @@ row_merge_read_clustered_index( dtuple_t* row; row_ext_t* ext; page_cur_t* cur = btr_pcur_get_page_cur(&pcur); + bool history_row, history_fts = false; page_cur_move_to_next(cur); @@ -2135,11 +2136,10 @@ end_of_index: row_heap); ut_ad(row); - if (new_table->versioned()) { - const dfield_t* dfield = dtuple_get_nth_field( - row, new_table->vers_end); - history_row = dfield->vers_history_row(); - } + history_row = new_table->versioned() + && dtuple_get_nth_field(row, new_table->vers_end) + ->vers_history_row(); + history_fts = history_row && new_table->fts; for (ulint i = 0; i < n_nonnull; i++) { dfield_t* field = &row->fields[nonnull[i]]; @@ -2170,7 +2170,7 @@ end_of_index: } /* Get the next Doc ID */ - if (add_doc_id && !history_row) { + if (add_doc_id && !history_fts) { doc_id++; } else { doc_id = 0; @@ -2329,7 +2329,7 @@ write_buffers: if (UNIV_LIKELY (row && (rows_added = row_merge_buf_add( buf, fts_index, old_table, new_table, - psort_info, row, history_row, ext, + psort_info, row, ext, history_fts, &doc_id, conv_heap, &err, &v_heap, eval_table, trx)))) { @@ -2662,8 +2662,8 @@ write_buffers: if (UNIV_UNLIKELY (!(rows_added = row_merge_buf_add( buf, fts_index, old_table, - new_table, psort_info, row, - history_row, ext, &doc_id, + new_table, psort_info, + row, ext, history_fts, &doc_id, conv_heap, &err, &v_heap, eval_table, trx)))) { /* An empty buffer should have enough