mariadb/mysql-test/suite/innodb/t/innochecksum_undo_page.test
Thirunarayanan Balathandayuthapani 9ba18d1aa0 MDEV-35394 Innochecksum misinterprets freed pages
- Innochecksum misinterprets the freed pages as active one.
This leads the user to think there are too many valid
pages exist.

- To avoid this confusion, innochecksum introduced one
more option --skip-freed-pages and -r to avoid the freed
pages while dumping or printing the summary of the tablespace.

- Innochecksum can safely assume the page is freed if
the respective extent doesn't belong to a segment and marked as
freed in XDES_BITMAP in extent descriptor page.

- Innochecksum shouldn't assume that zero-filled page as extent
descriptor page.

Reviewed-by: Marko Mäkelä
2024-11-27 13:00:51 +05:30

27 lines
1.1 KiB
Text

--source include/have_innodb.inc
--source include/not_embedded.inc
let MYSQLD_DATADIR= `SELECT @@datadir`;
SET GLOBAL INNODB_FILE_PER_TABLE= 0;
CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
INSERT INTO t1 VALUES(1);
DROP TABLE t1;
SET GLOBAL innodb_fast_shutdown=0;
--source include/shutdown_mysqld.inc
--echo # Run the innochecksum to display undo log pages
let $resultlog=$MYSQLTEST_VARDIR/tmp/result.log;
let SEARCH_FILE = $MYSQLTEST_VARDIR/tmp/result.log;
let SEARCH_ABORT = NOT FOUND;
exec $INNOCHECKSUM -S $MYSQLD_DATADIR/ibdata1 > $resultlog;
# Expected > 0 cached undo log pages, but can't guarantee it because
# the writes of freed pages may be optimized while flushing
let SEARCH_PATTERN= Undo page state: 0 active, [0-9]+ cached, [0-9]+ to_purge, [0-9]+ prepared, [0-9]+ other;
--source include/search_pattern_in_file.inc
--echo # Run the innochecksum with --skip-freed-pages
exec $INNOCHECKSUM -S -r $MYSQLD_DATADIR/ibdata1 > $resultlog;
let SEARCH_PATTERN= Undo page state: 0 active, 0 cached, 0 to_purge, 0 prepared, 0 other;
--source include/search_pattern_in_file.inc
--remove_file $resultlog
--source include/start_mysqld.inc