diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2018-10-20 09:58:34 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2018-10-20 09:58:34 +0300 |
commit | 5b63a660dda7de2cb74106edc2267568ac70b70a (patch) | |
tree | 60c283e84b08ffd7298faaf8e033963ae78bcde8 /storage/innobase/row/row0purge.cc | |
parent | d6889f2b58c0caeb31dc3f117ae33c31ec74df8c (diff) | |
download | mariadb-git-5b63a660dda7de2cb74106edc2267568ac70b70a.tar.gz |
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.
Diffstat (limited to 'storage/innobase/row/row0purge.cc')
-rw-r--r-- | storage/innobase/row/row0purge.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc index 527cf0336d5..5699c8b2f56 100644 --- a/storage/innobase/row/row0purge.cc +++ b/storage/innobase/row/row0purge.cc @@ -1147,10 +1147,13 @@ err_exit: /* Read to the partial row the fields that occur in indexes */ 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, clust_index, node->update, &node->row, type == TRX_UNDO_UPD_DEL_REC, node->heap); + } else if (node->update->info_bits & REC_INFO_MIN_REC_FLAG) { + node->ref = &trx_undo_metadata; } return(true); |