From 69b33fca8cce0912b7fecc79cbef895a119f3017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Tue, 12 Mar 2019 16:02:34 +0200 Subject: [PATCH] MDEV-18878: After-merge fixes In 10.3, all records will be processed by purge due to MDEV-12288. But, the insert undo records do not contain a transaction identifier. row_purge_parse_undo_rec(): Use node->trx_id=TRX_ID_MAX for the insert undo records. We cannot skip table lookups for these records after DISCARD TABLESPACE other than by 'detaching' the table from the undo logs by updating SYS_TABLES.ID on both DISCARD TABLESPACE and IMPORT TABLESPACE. Also, remove a redundant condition that was introduced in the merge commit 814205f306cad8a4b3e55785616ea69a027fef9d. --- storage/innobase/row/row0purge.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/storage/innobase/row/row0purge.cc b/storage/innobase/row/row0purge.cc index 7854901cfa8..af53a3bc153 100644 --- a/storage/innobase/row/row0purge.cc +++ b/storage/innobase/row/row0purge.cc @@ -1027,6 +1027,11 @@ row_purge_parse_undo_rec( return false; case TRX_UNDO_INSERT_METADATA: case TRX_UNDO_INSERT_REC: + /* These records do not store any transaction identifier. + + FIXME: Update SYS_TABLES.ID on both DISCARD TABLESPACE + and IMPORT TABLESPACE to get rid of the repeated lookups! */ + node->trx_id = TRX_ID_MAX; break; default: #ifdef UNIV_DEBUG @@ -1112,9 +1117,7 @@ inaccessible: node->table = NULL; err_exit: rw_lock_s_unlock(dict_operation_lock); - if (table_id) { - node->skip(table_id, trx_id); - } + node->skip(table_id, trx_id); return(false); }