MDEV-24832 Root page AHI removal fails during rollback of bulk insert

This failure is caused by commit 43ca6059
(MDEV-24720). InnoDB fails to remove the ahi entries
during rollback of bulk insert operation. InnoDB should
remove the AHI entries of root page before reinitialising it.

Reviewed-by: Marko Mäkelä
parent 786bc312
...@@ -25,5 +25,12 @@ ROLLBACK; ...@@ -25,5 +25,12 @@ ROLLBACK;
CHECK TABLE t1; CHECK TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check status OK test.t1 check status OK
#
# MDEV-24832 Root page AHI Removal fails fails during
# bulk index rollback
#
BEGIN;
INSERT INTO t1 SELECT * FROM seq_1_to_500;
ROLLBACK;
DROP TABLE t1; DROP TABLE t1;
SET GLOBAL innodb_adaptive_hash_index = @save_ahi; SET GLOBAL innodb_adaptive_hash_index = @save_ahi;
...@@ -24,5 +24,12 @@ BEGIN; ...@@ -24,5 +24,12 @@ BEGIN;
INSERT INTO t1 SELECT * FROM seq_1_to_65536; INSERT INTO t1 SELECT * FROM seq_1_to_65536;
ROLLBACK; ROLLBACK;
CHECK TABLE t1; CHECK TABLE t1;
--echo #
--echo # MDEV-24832 Root page AHI Removal fails fails during
--echo # bulk index rollback
--echo #
BEGIN;
INSERT INTO t1 SELECT * FROM seq_1_to_500;
ROLLBACK;
DROP TABLE t1; DROP TABLE t1;
SET GLOBAL innodb_adaptive_hash_index = @save_ahi; SET GLOBAL innodb_adaptive_hash_index = @save_ahi;
...@@ -1209,16 +1209,16 @@ void dict_index_t::clear(que_thr_t *thr) ...@@ -1209,16 +1209,16 @@ void dict_index_t::clear(que_thr_t *thr)
#endif #endif
); );
mtr.memset(root_block, PAGE_HEADER + PAGE_BTR_SEG_LEAF,
FSEG_HEADER_SIZE, 0);
if (fseg_create(table->space, PAGE_HEADER + PAGE_BTR_SEG_LEAF, &mtr, false,
root_block))
btr_root_page_init(root_block, id, this, &mtr);
#ifdef BTR_CUR_HASH_ADAPT #ifdef BTR_CUR_HASH_ADAPT
if (root_block->index) if (root_block->index)
btr_search_drop_page_hash_index(root_block); btr_search_drop_page_hash_index(root_block);
ut_ad(n_ahi_pages() == 0); ut_ad(n_ahi_pages() == 0);
#endif #endif
mtr.memset(root_block, PAGE_HEADER + PAGE_BTR_SEG_LEAF,
FSEG_HEADER_SIZE, 0);
if (fseg_create(table->space, PAGE_HEADER + PAGE_BTR_SEG_LEAF, &mtr, false,
root_block))
btr_root_page_init(root_block, id, this, &mtr);
} }
mtr.commit(); mtr.commit();
......
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