From d44a10f4dd3567fd84a7f5c6b8a00ce3a441eab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20M=C3=A4kel=C3=A4?= Date: Wed, 5 May 2021 12:51:44 +0300 Subject: [PATCH] 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. --- mysql-test/suite/innodb/r/doublewrite.result | 9 ++++++--- mysql-test/suite/innodb/t/doublewrite.test | 11 +++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/mysql-test/suite/innodb/r/doublewrite.result b/mysql-test/suite/innodb/r/doublewrite.result index 5adae545a7141..1f26f7d1f5f79 100644 --- a/mysql-test/suite/innodb/r/doublewrite.result +++ b/mysql-test/suite/innodb/r/doublewrite.result @@ -14,6 +14,9 @@ innodb_fil_make_page_dirty_debug 0 show variables like 'innodb_saved_page_number_debug'; Variable_name Value 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; start transaction; insert into t1 values(1, repeat('#',12)); @@ -29,17 +32,17 @@ select space from information_schema.innodb_sys_tables where name = 'test/t1' into @space_id; Warnings: Warning 1287 ' INTO FROM...' instead -# Ensure that dirty pages of table t1 is flushed. -flush tables t1 for export; -unlock tables; begin; 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 set global innodb_saved_page_number_debug = 0; set global innodb_fil_make_page_dirty_debug = @space_id; # Ensure that dirty pages of table t1 are flushed. set global innodb_buf_flush_list_now = 1; # Kill the server +disconnect stop_purge; # Make the first page (page_no=0) of the user tablespace # full of zeroes. # diff --git a/mysql-test/suite/innodb/t/doublewrite.test b/mysql-test/suite/innodb/t/doublewrite.test index 1a36dbef337ba..bd4f5fadcc3a1 100644 --- a/mysql-test/suite/innodb/t/doublewrite.test +++ b/mysql-test/suite/innodb/t/doublewrite.test @@ -34,6 +34,10 @@ show variables like 'innodb_doublewrite'; show variables like 'innodb_fil_make_page_dirty_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; start transaction; @@ -51,12 +55,10 @@ commit work; select space from information_schema.innodb_sys_tables 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; 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 @@ -69,6 +71,7 @@ set global innodb_buf_flush_list_now = 1; --let CLEANUP_IF_CHECKPOINT=drop table t1; --source ../include/no_checkpoint_end.inc +disconnect stop_purge; --echo # Make the first page (page_no=0) of the user tablespace --echo # full of zeroes.