Commit d44a10f4 authored by Marko Mäkelä's avatar Marko Mäkelä

MDEV-23855 follow-up: Make innodb.doublewrite more stable

The test innodb.doublewrite could occasionally fail with 64KiB page size
because the page 0 would no longer be in the doublewrite buffer.
Let us stop purge before the server is killed, and ensure that
the entire buffer pool will be flushed before we initiate an extra
write of page 0.
parent f6732774
...@@ -14,6 +14,9 @@ innodb_fil_make_page_dirty_debug 0 ...@@ -14,6 +14,9 @@ innodb_fil_make_page_dirty_debug 0
show variables like 'innodb_saved_page_number_debug'; show variables like 'innodb_saved_page_number_debug';
Variable_name Value Variable_name Value
innodb_saved_page_number_debug 0 innodb_saved_page_number_debug 0
connect stop_purge,localhost,root,,;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
create table t1 (f1 int primary key, f2 blob) engine=innodb; create table t1 (f1 int primary key, f2 blob) engine=innodb;
start transaction; start transaction;
insert into t1 values(1, repeat('#',12)); insert into t1 values(1, repeat('#',12));
...@@ -29,17 +32,17 @@ select space from information_schema.innodb_sys_tables ...@@ -29,17 +32,17 @@ select space from information_schema.innodb_sys_tables
where name = 'test/t1' into @space_id; where name = 'test/t1' into @space_id;
Warnings: Warnings:
Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
# Ensure that dirty pages of table t1 is flushed.
flush tables t1 for export;
unlock tables;
begin; begin;
insert into t1 values (6, repeat('%', 12)); insert into t1 values (6, repeat('%', 12));
# Ensure that dirty pages of table t1 are flushed.
set global innodb_buf_flush_list_now = 1;
# Make the first page dirty for table t1 # Make the first page dirty for table t1
set global innodb_saved_page_number_debug = 0; set global innodb_saved_page_number_debug = 0;
set global innodb_fil_make_page_dirty_debug = @space_id; set global innodb_fil_make_page_dirty_debug = @space_id;
# Ensure that dirty pages of table t1 are flushed. # Ensure that dirty pages of table t1 are flushed.
set global innodb_buf_flush_list_now = 1; set global innodb_buf_flush_list_now = 1;
# Kill the server # Kill the server
disconnect stop_purge;
# Make the first page (page_no=0) of the user tablespace # Make the first page (page_no=0) of the user tablespace
# full of zeroes. # full of zeroes.
# #
......
...@@ -34,6 +34,10 @@ show variables like 'innodb_doublewrite'; ...@@ -34,6 +34,10 @@ show variables like 'innodb_doublewrite';
show variables like 'innodb_fil_make_page_dirty_debug'; show variables like 'innodb_fil_make_page_dirty_debug';
show variables like 'innodb_saved_page_number_debug'; show variables like 'innodb_saved_page_number_debug';
connect (stop_purge,localhost,root,,);
START TRANSACTION WITH CONSISTENT SNAPSHOT;
connection default;
create table t1 (f1 int primary key, f2 blob) engine=innodb; create table t1 (f1 int primary key, f2 blob) engine=innodb;
start transaction; start transaction;
...@@ -51,12 +55,10 @@ commit work; ...@@ -51,12 +55,10 @@ commit work;
select space from information_schema.innodb_sys_tables select space from information_schema.innodb_sys_tables
where name = 'test/t1' into @space_id; where name = 'test/t1' into @space_id;
--echo # Ensure that dirty pages of table t1 is flushed.
flush tables t1 for export;
unlock tables;
begin; begin;
insert into t1 values (6, repeat('%', 12)); insert into t1 values (6, repeat('%', 12));
--echo # Ensure that dirty pages of table t1 are flushed.
set global innodb_buf_flush_list_now = 1;
--source ../include/no_checkpoint_start.inc --source ../include/no_checkpoint_start.inc
...@@ -69,6 +71,7 @@ set global innodb_buf_flush_list_now = 1; ...@@ -69,6 +71,7 @@ set global innodb_buf_flush_list_now = 1;
--let CLEANUP_IF_CHECKPOINT=drop table t1; --let CLEANUP_IF_CHECKPOINT=drop table t1;
--source ../include/no_checkpoint_end.inc --source ../include/no_checkpoint_end.inc
disconnect stop_purge;
--echo # Make the first page (page_no=0) of the user tablespace --echo # Make the first page (page_no=0) of the user tablespace
--echo # full of zeroes. --echo # full of zeroes.
......
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