summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThirunarayanan Balathandayuthapani <thiru@mariadb.com>2022-03-26 12:05:53 +0530
committerThirunarayanan Balathandayuthapani <thiru@mariadb.com>2022-03-26 12:06:13 +0530
commit5a607f95151475950ee8875dc13156b0b9523907 (patch)
tree50dfd14d64cad2b60dcc71b57753b510dcfc4cf6
parentc433c9587f374103ee20751f6214e979fad63cab (diff)
downloadmariadb-git-5a607f95151475950ee8875dc13156b0b9523907.tar.gz
- Fixing TRX_UNDO_UPD_DEL_REC read error issue
-rw-r--r--storage/innobase/row/row0log.cc9
-rw-r--r--storage/innobase/trx/trx0undo.cc10
2 files changed, 12 insertions, 7 deletions
diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc
index 195b91ed6a1..e897e5306ac 100644
--- a/storage/innobase/row/row0log.cc
+++ b/storage/innobase/row/row0log.cc
@@ -4227,7 +4227,14 @@ void row_log_insert_handle(const dtuple_t *tuple,
copy_rec, offsets, table, NULL, NULL, &ext, heap);
if (table->n_v_cols)
- trx_undo_read_v_cols(table, rec_info->undo_rec, row, false);
+ {
+ if (rec_info->type == TRX_UNDO_UPD_DEL_REC)
+ row_upd_replace_vcol(row, table, rec_info->update, false,
+ nullptr,
+ (rec_info->cmpl_info & UPD_NODE_NO_ORD_CHANGE)
+ ? nullptr : rec_info->undo_rec);
+ else trx_undo_read_v_cols(table, rec_info->undo_rec, row, false);
+ }
dict_index_t *index= dict_table_get_next_index(clust_index);
while (index)
diff --git a/storage/innobase/trx/trx0undo.cc b/storage/innobase/trx/trx0undo.cc
index cd307a22ff4..8efe7e3dec8 100644
--- a/storage/innobase/trx/trx0undo.cc
+++ b/storage/innobase/trx/trx0undo.cc
@@ -328,16 +328,14 @@ static void trx_undo_rec_apply_update(trx_undo_rec_t *rec,
&info_bits);
rec= trx_undo_rec_get_row_ref(rec, index, &undo_tuple, heap);
+ rec= trx_undo_update_rec_get_update(rec, index, rec_info->type,
+ trx_id, roll_ptr, info_bits,
+ heap, &rec_info->update);
+ rec_info->undo_rec= rec;
if (rec_info->type == TRX_UNDO_UPD_DEL_REC)
row_log_insert_handle(undo_tuple, rec_info, index, heap);
else
- {
- rec= trx_undo_update_rec_get_update(rec, index, rec_info->type,
- trx_id, roll_ptr, info_bits,
- heap, &rec_info->update);
- rec_info->undo_rec= rec;
row_log_update_handle(undo_tuple, rec_info, index, heap);
- }
}
/** Apply all DML undo log records to the online DDL tables