mirror of
https://github.com/MariaDB/server.git
synced 2026-02-13 06:08:42 +01:00
Reason: ====== undo_space_dblwr test case fails if the first page of undo tablespace is not flushed before restart the server. While restarting the server, InnoDB fails to detect the first page of undo tablespace from doublewrite buffer. Fix: === Use "ib_log_checkpoint_avoid_hard" debug sync point to avoid checkpoint and make sure to flush the dirtied page before killing the server. innodb_make_page_dirty(): Fails to set srv_fil_make_page_dirty_debug variable.
46 lines
1.6 KiB
Text
46 lines
1.6 KiB
Text
--source include/have_innodb.inc
|
|
--source include/have_debug.inc
|
|
--source include/not_embedded.inc
|
|
call mtr.add_suppression("Checksum mismatch in the first page of file");
|
|
let INNODB_PAGE_SIZE=`select @@innodb_page_size`;
|
|
let MYSQLD_DATADIR=`select @@datadir`;
|
|
|
|
show variables like 'innodb_doublewrite';
|
|
create table t1(f1 int not null, f2 int not null)engine=innodb;
|
|
insert into t1 values (1, 1);
|
|
|
|
# Slow shutdown and restart to make sure ibuf merge is finished
|
|
SET GLOBAL innodb_fast_shutdown = 0;
|
|
let $shutdown_timeout=;
|
|
let $restart_parameters="--debug_dbug=+d,ib_log_checkpoint_avoid_hard --innodb_flush_sync=0";
|
|
--source include/restart_mysqld.inc
|
|
|
|
--source ../include/no_checkpoint_start.inc
|
|
--echo # Make the first page dirty for undo tablespace
|
|
set global innodb_saved_page_number_debug = 0;
|
|
set global innodb_fil_make_page_dirty_debug = 1;
|
|
|
|
SET GLOBAL innodb_buf_flush_list_now = 1;
|
|
|
|
--let CLEANUP_IF_CHECKPOINT=drop table t1;
|
|
--source ../include/no_checkpoint_end.inc
|
|
|
|
perl;
|
|
use IO::Handle;
|
|
my $fname= "$ENV{'MYSQLD_DATADIR'}/undo001";
|
|
my $page_size = $ENV{INNODB_PAGE_SIZE};
|
|
die unless open(FILE, "+<", $fname);
|
|
sysread(FILE, $page, $page_size)==$page_size||die "Unable to read $name\n";
|
|
substr($page, 49, 4) = pack("N", 1000);
|
|
sysseek(FILE, 0, 0)||die "Unable to seek $fname\n";
|
|
die unless syswrite(FILE, $page, $page_size) == $page_size;
|
|
close FILE;
|
|
EOF
|
|
|
|
--source include/start_mysqld.inc
|
|
let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
|
let SEARCH_PATTERN= Checksum mismatch in the first page of file;
|
|
--source include/search_pattern_in_file.inc
|
|
|
|
check table t1;
|
|
drop table t1;
|