Commit 5b63a660 authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-11369/MDEV-12288: Reset DB_TRX_ID on the metadata record

On the hidden metadata record, if instant ALTER TABLE was executed
multiple times on the same table, purge could fail to reset the
DB_TRX_ID,DB_ROLL_PTR on the updated metadata record. This is
only a cosmetic failure that was caught (and separately fixed)
in 10.4 during the MDEV-15562 development. The problem was that
occasionally, innodb.instant_alter_crash would fail with a
result difference due to the DB_TRX_ID,DB_ROLL_PTR not having
been reset on the metadata record.

This bug should have no noticeable impact, because the metadata
record is invisible to the SQL layer, and never subjected to
MVCC or locking.

I was unable to repeat the problem on 10.3.

row_purge_parse_undo_rec(): Set node->ref for the metadata record.
parent d6889f2b
...@@ -1147,10 +1147,13 @@ row_purge_parse_undo_rec( ...@@ -1147,10 +1147,13 @@ row_purge_parse_undo_rec(
/* Read to the partial row the fields that occur in indexes */ /* Read to the partial row the fields that occur in indexes */
if (!(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) { if (!(node->cmpl_info & UPD_NODE_NO_ORD_CHANGE)) {
ut_ad(!(node->update->info_bits & REC_INFO_MIN_REC_FLAG));
ptr = trx_undo_rec_get_partial_row( ptr = trx_undo_rec_get_partial_row(
ptr, clust_index, node->update, &node->row, ptr, clust_index, node->update, &node->row,
type == TRX_UNDO_UPD_DEL_REC, type == TRX_UNDO_UPD_DEL_REC,
node->heap); node->heap);
} else if (node->update->info_bits & REC_INFO_MIN_REC_FLAG) {
node->ref = &trx_undo_metadata;
} }
return(true); return(true);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment