mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
MDEV-37412: Better test case
Instead of using DBUG_EXECUTE_IF fault injection, let us construct a minimal corrupted log file that will produce an OPT_PAGE_CHECKSUM mismatch without depending on CMAKE_BUILD_TYPE=Debug.
This commit is contained in:
parent
b87b28d8de
commit
fe59b4ce96
5 changed files with 97 additions and 28 deletions
|
|
@ -4,15 +4,6 @@ INSERT INTO t1 VALUES(1, 'sql'), (2, 'server'), (3, 'mariadb'),
|
|||
(4, 'mariadb'), (5, 'test1'), (6, 'test2'), (7, 'test3'),
|
||||
(8, 'test4'), (9, 'test5'), (10, 'test6'), (11, 'test7'),
|
||||
(12, 'test8');
|
||||
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=[1-9], page number=0\\] of corrupted file '.*mdev_37412\\.ibd'");
|
||||
SET GLOBAL innodb_log_checkpoint_now=ON;
|
||||
CREATE TABLE mdev_37412(id INT AUTO_INCREMENT, PRIMARY KEY(id))
|
||||
STATS_PERSISTENT=0 ENGINE=InnoDB;
|
||||
# Kill the server
|
||||
# restart: --debug_dbug=+d,recv_corrupt
|
||||
SELECT * FROM mdev_37412;
|
||||
id
|
||||
DROP TABLE mdev_37412;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
12
|
||||
|
|
|
|||
30
mysql-test/suite/innodb/r/log_corruption_recovery.result
Normal file
30
mysql-test/suite/innodb/r/log_corruption_recovery.result
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
#
|
||||
# MDEV-37412 Corrupted page during recovery aborts the server
|
||||
#
|
||||
call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch on \\[page id: space=127, page number=0\\]");
|
||||
call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1");
|
||||
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=127, page number=0\\] of corrupted file '.*test/t\\.ibd");
|
||||
call mtr.add_suppression("(InnoDB: Plugin|Plugin 'InnoDB')");
|
||||
call mtr.add_suppression("InnoDB: Page .* Current system log sequence number 123(38|54)\\.");
|
||||
SET GLOBAL innodb_fast_shutdown=0;
|
||||
# restart
|
||||
SELECT * FROM INFORMATION_SCHEMA.ENGINES
|
||||
WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
NOT FOUND /InnoDB: Page .* Current system log sequence number/ in mysqld.1.err
|
||||
# restart: --innodb-force-recovery=1
|
||||
SELECT * FROM INFORMATION_SCHEMA.ENGINES
|
||||
WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
InnoDB YES Supports transactions, row-level locking, foreign keys and encryption for tables YES YES YES
|
||||
FOUND 1 /InnoDB: Page .* Current system log sequence number/ in mysqld.1.err
|
||||
FOUND 2 /InnoDB: OPT_PAGE_CHECKSUM mismatch on \[page id: space=127, page number=0\]/ in mysqld.1.err
|
||||
FOUND 1 /InnoDB: Cannot apply log to \[page id: space=127, page number=0\] of corrupted file .*test/t\.ibd/ in mysqld.1.err
|
||||
# restart
|
||||
SELECT * FROM INFORMATION_SCHEMA.ENGINES
|
||||
WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
||||
InnoDB YES Supports transactions, row-level locking, foreign keys and encryption for tables YES YES YES
|
||||
|
|
@ -21,23 +21,8 @@ INSERT INTO t1 VALUES(1, 'sql'), (2, 'server'), (3, 'mariadb'),
|
|||
(8, 'test4'), (9, 'test5'), (10, 'test6'), (11, 'test7'),
|
||||
(12, 'test8');
|
||||
|
||||
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=[1-9], page number=0\\] of corrupted file '.*mdev_37412\\.ibd'");
|
||||
SET GLOBAL innodb_log_checkpoint_now=ON;
|
||||
--source ../include/no_checkpoint_start.inc
|
||||
CREATE TABLE mdev_37412(id INT AUTO_INCREMENT, PRIMARY KEY(id))
|
||||
STATS_PERSISTENT=0 ENGINE=InnoDB;
|
||||
--let CLEANUP_IF_CHECKPOINT=DROP TABLE t1,mdev_37412;
|
||||
--source ../include/no_checkpoint_end.inc
|
||||
|
||||
--let $restart_parameters=--debug_dbug=+d,recv_corrupt
|
||||
--source include/start_mysqld.inc
|
||||
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
||||
let SEARCH_PATTERN= InnoDB: Cannot apply log to \\[page id: space=[1-9], page number=0\\] of corrupted file '.*mdev_37412\\.ibd';
|
||||
--let $restart_parameters=
|
||||
let $restart_noprint=2;
|
||||
--source include/restart_mysqld.inc
|
||||
SELECT * FROM mdev_37412;
|
||||
DROP TABLE mdev_37412;
|
||||
|
||||
let INNODB_PAGE_SIZE=`select @@innodb_page_size`;
|
||||
let MYSQLD_DATADIR=`select @@datadir`;
|
||||
|
|
|
|||
67
mysql-test/suite/innodb/t/log_corruption_recovery.test
Normal file
67
mysql-test/suite/innodb/t/log_corruption_recovery.test
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
--source include/have_innodb.inc
|
||||
|
||||
--let DATADIR=`select @@datadir`
|
||||
let $check_no_innodb=SELECT * FROM INFORMATION_SCHEMA.ENGINES
|
||||
WHERE engine = 'innodb'
|
||||
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
||||
--let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-37412 Corrupted page during recovery aborts the server
|
||||
--echo #
|
||||
|
||||
call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch on \\[page id: space=127, page number=0\\]");
|
||||
call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1");
|
||||
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=127, page number=0\\] of corrupted file '.*test/t\\.ibd");
|
||||
call mtr.add_suppression("(InnoDB: Plugin|Plugin 'InnoDB')");
|
||||
call mtr.add_suppression("InnoDB: Page .* Current system log sequence number 123(38|54)\\.");
|
||||
|
||||
SET GLOBAL innodb_fast_shutdown=0;
|
||||
--source include/shutdown_mysqld.inc
|
||||
--move_file $DATADIR/ib_logfile0 $DATADIR/ib_logfile0.old
|
||||
perl;
|
||||
do "$ENV{MTR_SUITE_DIR}/../innodb/include/crc32.pl";
|
||||
die unless open OUT, ">", "$ENV{DATADIR}/ib_logfile0";
|
||||
binmode OUT;
|
||||
sub crc32c {
|
||||
my ($input) = @_;
|
||||
print OUT $input, pack("N", mycrc32($input, 0, 0x82f63b78))
|
||||
}
|
||||
sub mtr {
|
||||
my ($input) = @_;
|
||||
print OUT $input, chr(1), pack("N", mycrc32($input, 0, 0x82f63b78))
|
||||
}
|
||||
crc32c("Phys" . pack("x[8]N", 0x3000) . "BogoDB 1.2.3.4" . chr(0) x 478);
|
||||
print OUT chr(0) x 3584;
|
||||
crc32c(pack("x[4]Nx[4]Nx[44]", 0x3000, 0x3000));
|
||||
print OUT chr(0) x 8128;
|
||||
mtr(pack("Cx[6]N", 0xfa, 0x3000)); # FILE_CHECKPOINT
|
||||
mtr(pack("CCx", 0x8c, 127) . "test/t.ibd"); # FILE_CREATE
|
||||
# INIT_PAGE, OPT_PAGE_CHECKSUM
|
||||
mtr(pack("CCxCCx[6]", 0x12, 127, 0x77, 127));
|
||||
EOF
|
||||
|
||||
write_file $DATADIR/test/t.ibd;
|
||||
EOF
|
||||
|
||||
--source include/start_mysqld.inc
|
||||
eval $check_no_innodb;
|
||||
let SEARCH_PATTERN=InnoDB: Page .* Current system log sequence number;
|
||||
--source include/search_pattern_in_file.inc
|
||||
--let $restart_parameters=--innodb-force-recovery=1
|
||||
--source include/restart_mysqld.inc
|
||||
eval $check_no_innodb;
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
--move_file $DATADIR/ib_logfile0.old $DATADIR/ib_logfile0
|
||||
--remove_file $DATADIR/test/t.ibd
|
||||
--let $restart_parameters=
|
||||
|
||||
--source include/search_pattern_in_file.inc
|
||||
let SEARCH_PATTERN=InnoDB: OPT_PAGE_CHECKSUM mismatch on \\[page id: space=127, page number=0\\];
|
||||
--source include/search_pattern_in_file.inc
|
||||
let SEARCH_PATTERN=InnoDB: Cannot apply log to \\[page id: space=127, page number=0\\] of corrupted file .*test/t\\.ibd;
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--source include/start_mysqld.inc
|
||||
eval $check_no_innodb;
|
||||
Loading…
Add table
Add a link
Reference in a new issue