Skip to content

Commit

Permalink
MDEV-12288 follow-up: Adjust PAGE_MAX_TRX_ID in online ADD INDEX
Browse files Browse the repository at this point in the history
row_log_table_apply_convert_mrec(), row_log_table_apply_insert_low(),
row_log_table_apply_insert(), row_log_table_apply_update(): Remove
the trx_id parameter. The clustered index may contain DB_TRX_ID=0,
but PAGE_MAX_TRX_ID=0 is invalid for secondary indexes. Use the
current transaction ID when inserting secondary index records.

row_log_table_apply_op(): Remove the trx_id_col parameter.
  • Loading branch information
dr-m committed Aug 9, 2017
1 parent 932273a commit c039cac
Showing 1 changed file with 18 additions and 41 deletions.
59 changes: 18 additions & 41 deletions storage/innobase/row/row0log.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1453,7 +1453,6 @@ row_log_table_apply_convert_mrec(
const ulint* offsets, /*!< in: offsets of mrec */
const row_log_t* log, /*!< in: rebuild context */
mem_heap_t* heap, /*!< in/out: memory heap */
trx_id_t trx_id, /*!< in: DB_TRX_ID of mrec */
dberr_t* error) /*!< out: DB_SUCCESS or
DB_MISSING_HISTORY or
reason of failure */
Expand Down Expand Up @@ -1617,7 +1616,6 @@ row_log_table_apply_insert_low(
que_thr_t* thr, /*!< in: query graph */
const dtuple_t* row, /*!< in: table row
in the old table definition */
trx_id_t trx_id, /*!< in: trx_id of the row */
mem_heap_t* offsets_heap, /*!< in/out: memory heap
that can be emptied */
mem_heap_t* heap, /*!< in/out: memory heap */
Expand All @@ -1631,7 +1629,6 @@ row_log_table_apply_insert_low(
ulint n_index = 0;

ut_ad(dtuple_validate(row));
ut_ad(trx_id);

DBUG_LOG("ib_alter_table",
"insert table " << index->table->id << " (index "
Expand Down Expand Up @@ -1673,8 +1670,8 @@ row_log_table_apply_insert_low(
entry = row_build_index_entry(row, NULL, index, heap);
error = row_ins_sec_index_entry_low(
flags, BTR_MODIFY_TREE,
index, offsets_heap, heap, entry, trx_id, thr,
false);
index, offsets_heap, heap, entry,
thr_get_trx(thr)->id, thr, false);

/* Report correct index name for duplicate key error. */
if (error == DB_DUPLICATE_KEY) {
Expand All @@ -1699,14 +1696,13 @@ row_log_table_apply_insert(
mem_heap_t* offsets_heap, /*!< in/out: memory heap
that can be emptied */
mem_heap_t* heap, /*!< in/out: memory heap */
row_merge_dup_t* dup, /*!< in/out: for reporting
row_merge_dup_t* dup) /*!< in/out: for reporting
duplicate key errors */
trx_id_t trx_id) /*!< in: DB_TRX_ID of mrec */
{
const row_log_t*log = dup->index->online_log;
dberr_t error;
const dtuple_t* row = row_log_table_apply_convert_mrec(
mrec, dup->index, offsets, log, heap, trx_id, &error);
mrec, dup->index, offsets, log, heap, &error);

switch (error) {
case DB_MISSING_HISTORY:
Expand All @@ -1729,7 +1725,7 @@ row_log_table_apply_insert(
}

error = row_log_table_apply_insert_low(
thr, row, trx_id, offsets_heap, heap, dup);
thr, row, offsets_heap, heap, dup);
if (error != DB_SUCCESS) {
/* Report the erroneous row using the new
version of the table. */
Expand Down Expand Up @@ -1997,7 +1993,6 @@ row_log_table_apply_update(
mem_heap_t* heap, /*!< in/out: memory heap */
row_merge_dup_t* dup, /*!< in/out: for reporting
duplicate key errors */
trx_id_t trx_id, /*!< in: DB_TRX_ID of mrec */
const dtuple_t* old_pk) /*!< in: PRIMARY KEY and
DB_TRX_ID,DB_ROLL_PTR
of the old value,
Expand All @@ -2018,7 +2013,7 @@ row_log_table_apply_update(
+ (log->same_pk ? 0 : 2));

row = row_log_table_apply_convert_mrec(
mrec, dup->index, offsets, log, heap, trx_id, &error);
mrec, dup->index, offsets, log, heap, &error);

switch (error) {
case DB_MISSING_HISTORY:
Expand Down Expand Up @@ -2106,7 +2101,7 @@ row_log_table_apply_update(
ROW_T_UPDATE or ROW_T_DELETE will delete it. */
mtr_commit(&mtr);
error = row_log_table_apply_insert_low(
thr, row, trx_id, offsets_heap, heap, dup);
thr, row, offsets_heap, heap, dup);
} else {
/* Some BLOBs are missing, so we are interpreting
this ROW_T_UPDATE as ROW_T_DELETE (see *1).
Expand Down Expand Up @@ -2232,7 +2227,7 @@ row_log_table_apply_update(

if (error == DB_SUCCESS) {
error = row_log_table_apply_insert_low(
thr, row, trx_id, offsets_heap, heap, dup);
thr, row, offsets_heap, heap, dup);
}

goto func_exit_committed;
Expand Down Expand Up @@ -2332,7 +2327,7 @@ row_log_table_apply_update(
BTR_CREATE_FLAG | BTR_NO_LOCKING_FLAG
| BTR_NO_UNDO_LOG_FLAG | BTR_KEEP_SYS_FLAG,
BTR_MODIFY_TREE, index, offsets_heap, heap,
entry, trx_id, thr, false);
entry, thr_get_trx(thr)->id, thr, false);

/* Report correct index name for duplicate key error. */
if (error == DB_DUPLICATE_KEY) {
Expand All @@ -2355,8 +2350,6 @@ const mrec_t*
row_log_table_apply_op(
/*===================*/
que_thr_t* thr, /*!< in: query graph */
ulint trx_id_col, /*!< in: position of
DB_TRX_ID in old index */
ulint new_trx_id_col, /*!< in: position of
DB_TRX_ID in new index */
row_merge_dup_t* dup, /*!< in/out: for reporting
Expand Down Expand Up @@ -2426,15 +2419,9 @@ row_log_table_apply_op(
return(NULL);
} else {
log->head.total += next_mrec - mrec_start;

ulint len;
const byte* db_trx_id
= rec_get_nth_field(
mrec, offsets, trx_id_col, &len);
ut_ad(len == DATA_TRX_ID_LEN);
*error = row_log_table_apply_insert(
thr, mrec, offsets, offsets_heap,
heap, dup, trx_read_trx_id(db_trx_id));
heap, dup);
}
break;

Expand Down Expand Up @@ -2666,18 +2653,9 @@ row_log_table_apply_op(
log->head.total += next_mrec - mrec_start;
dtuple_set_n_fields_cmp(old_pk, new_index->n_uniq);

{
ulint len;
const byte* db_trx_id
= rec_get_nth_field(
mrec, offsets, trx_id_col, &len);
ut_ad(len == DATA_TRX_ID_LEN);
*error = row_log_table_apply_update(
thr, new_trx_id_col,
mrec, offsets, offsets_heap,
heap, dup, trx_read_trx_id(db_trx_id), old_pk);
}

*error = row_log_table_apply_update(
thr, new_trx_id_col,
mrec, offsets, offsets_heap, heap, dup, old_pk);
break;
}

Expand Down Expand Up @@ -2773,8 +2751,6 @@ row_log_table_apply_ops(
const ulint i = 1 + REC_OFFS_HEADER_SIZE
+ ut_max(dict_index_get_n_fields(index),
dict_index_get_n_unique(new_index) + 2);
const ulint trx_id_col = dict_col_get_clust_pos(
dict_table_get_sys_col(index->table, DATA_TRX_ID), index);
const ulint new_trx_id_col = dict_col_get_clust_pos(
dict_table_get_sys_col(new_table, DATA_TRX_ID), new_index);
trx_t* trx = thr_get_trx(thr);
Expand All @@ -2784,8 +2760,9 @@ row_log_table_apply_ops(
ut_ad(trx->mysql_thd);
ut_ad(rw_lock_own(dict_index_get_lock(index), RW_LOCK_X));
ut_ad(!dict_index_is_online_ddl(new_index));
ut_ad(trx_id_col > 0);
ut_ad(trx_id_col != ULINT_UNDEFINED);
ut_ad(dict_col_get_clust_pos(
dict_table_get_sys_col(index->table, DATA_TRX_ID), index)
!= ULINT_UNDEFINED);
ut_ad(new_trx_id_col > 0);
ut_ad(new_trx_id_col != ULINT_UNDEFINED);

Expand Down Expand Up @@ -2932,7 +2909,7 @@ row_log_table_apply_ops(
memcpy((mrec_t*) mrec_end, next_mrec,
(&index->online_log->head.buf)[1] - mrec_end);
mrec = row_log_table_apply_op(
thr, trx_id_col, new_trx_id_col,
thr, new_trx_id_col,
dup, &error, offsets_heap, heap,
index->online_log->head.buf,
(&index->online_log->head.buf)[1], offsets);
Expand Down Expand Up @@ -3030,7 +3007,7 @@ row_log_table_apply_ops(
}

next_mrec = row_log_table_apply_op(
thr, trx_id_col, new_trx_id_col,
thr, new_trx_id_col,
dup, &error, offsets_heap, heap,
mrec, mrec_end, offsets);

Expand Down

0 comments on commit c039cac

Please sign in to comment.