1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-24796 Assertion `page_has_next... failed in btr_pcur_store_position()

In commit eaeb8ec4b8 (MDEV-24653)
an incorrect debug assertion was introduced.

btr_pcur_store_position(): If the only record in the page is the
instant ALTER TABLE metadata record, we cannot expect there to be
a successor page. The situation could be improved by MDEV-24673 later.
This commit is contained in:
Marko Mäkelä
2021-03-22 15:22:59 +02:00
parent 0f3045e432
commit 61e00db6ad
3 changed files with 30 additions and 3 deletions

View File

@ -303,5 +303,19 @@ SELECT * FROM t1;
a b c
DROP TABLE t1;
SET GLOBAL innodb_limit_optimistic_insert_debug = @saved_limit;
#
# MDEV-24796 Assertion page_has_next... failed
# in btr_pcur_store_position()
#
CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES(1),(2);
SET GLOBAL innodb_limit_optimistic_insert_debug=2;
ALTER TABLE t1 ADD COLUMN d INT;
DELETE FROM t1;
InnoDB 0 transactions not purged
SELECT * FROM t1 WHERE c<>1 ORDER BY c DESC;
c d
DROP TABLE t1;
SET GLOBAL innodb_limit_optimistic_insert_debug = @saved_limit;
# End of 10.3 tests
SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency;

View File

@ -348,6 +348,22 @@ SELECT * FROM t1;
DROP TABLE t1;
SET GLOBAL innodb_limit_optimistic_insert_debug = @saved_limit;
--echo #
--echo # MDEV-24796 Assertion page_has_next... failed
--echo # in btr_pcur_store_position()
--echo #
CREATE TABLE t1 (c INT KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES(1),(2);
SET GLOBAL innodb_limit_optimistic_insert_debug=2;
ALTER TABLE t1 ADD COLUMN d INT;
DELETE FROM t1;
--source include/wait_all_purged.inc
SELECT * FROM t1 WHERE c<>1 ORDER BY c DESC;
DROP TABLE t1;
SET GLOBAL innodb_limit_optimistic_insert_debug = @saved_limit;
--echo # End of 10.3 tests
SET GLOBAL innodb_purge_rseg_truncate_frequency = @save_frequency;

View File

@ -169,9 +169,6 @@ before_first:
ut_ad(!page_has_prev(block->frame));
rec = page_rec_get_next(rec);
if (page_rec_is_supremum(rec)) {
ut_ad(page_has_next(block->frame)
|| block->page.id.page_no()
!= index->page);
goto before_first;
}
}