summaryrefslogtreecommitdiff
path: root/storage/innobase/row/row0purge.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-10-20 09:58:34 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2018-10-20 09:58:34 +0300
commit5b63a660dda7de2cb74106edc2267568ac70b70a (patch)
tree60c283e84b08ffd7298faaf8e033963ae78bcde8 /storage/innobase/row/row0purge.cc
parentd6889f2b58c0caeb31dc3f117ae33c31ec74df8c (diff)
downloadmariadb-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.cc3
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);