summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-09-26 12:48:55 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2019-09-26 13:03:40 +0300
commit2d6719d7ee92843d5b0b9a27c7deaff5cacd4745 (patch)
tree700e11d45ffdb9aebe6d183484ce7f5066495f57
parent23d675453f182becb3bc5811bfa7e2e310cbed1d (diff)
downloadmariadb-git-2d6719d7ee92843d5b0b9a27c7deaff5cacd4745.tar.gz
MDEV-19514 preparation: Extend innodb.innodb-change-buffer-recovery
Test innodb_read_only startup (which will be refused after a crash), and test also innodb_force_recovery=5, and extract some change buffer merge statistics. Omit any statistics about delete (purge) buffering, because purge could happen at any time. Use the sequence storage engine for populating the table.
-rw-r--r--mysql-test/suite/innodb/r/innodb-change-buffer-recovery.result36
-rw-r--r--mysql-test/suite/innodb/t/innodb-change-buffer-recovery-master.opt1
-rw-r--r--mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test41
3 files changed, 46 insertions, 32 deletions
diff --git a/mysql-test/suite/innodb/r/innodb-change-buffer-recovery.result b/mysql-test/suite/innodb/r/innodb-change-buffer-recovery.result
index f03072053c3..156ef0e56be 100644
--- a/mysql-test/suite/innodb/r/innodb-change-buffer-recovery.result
+++ b/mysql-test/suite/innodb/r/innodb-change-buffer-recovery.result
@@ -2,6 +2,10 @@
# Bug#69122 - INNODB DOESN'T REDO-LOG INSERT BUFFER MERGE
# OPERATION IF IT IS DONE IN-PLACE
#
+call mtr.add_suppression("InnoDB: innodb_read_only prevents crash recovery");
+call mtr.add_suppression("Plugin initialization aborted at srv0start\\.cc");
+call mtr.add_suppression("Plugin 'InnoDB'");
+FLUSH TABLES;
CREATE TABLE t1(
a INT AUTO_INCREMENT PRIMARY KEY,
b CHAR(1),
@@ -9,20 +13,7 @@ c INT,
INDEX(b))
ENGINE=InnoDB STATS_PERSISTENT=0;
SET GLOBAL innodb_change_buffering_debug = 1;
-INSERT INTO t1 VALUES(0,'x',1);
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
+INSERT INTO t1 SELECT 0,'x',1 FROM seq_1_to_8192;
BEGIN;
SELECT b FROM t1 LIMIT 3;
b
@@ -38,8 +29,23 @@ SELECT b FROM t1 LIMIT 3;
ERROR HY000: Lost connection to MySQL server during query
disconnect con1;
connection default;
-FOUND 1 /Wrote log record for ibuf update in place operation/ in my_restart.err
+FOUND 1 /Wrote log record for ibuf update in place operation/ in mysqld.1.err
+CHECK TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 check Error Unknown storage engine 'InnoDB'
+test.t1 check error Corrupt
+FOUND 1 /innodb_read_only prevents crash recovery/ in mysqld.1.err
+SELECT * FROM t1 LIMIT 1;
+a b c
+1 X 1
+SHOW ENGINE INNODB STATUS;
+Type Name Status
+InnoDB insert 0, delete mark 0
+SET GLOBAL innodb_fast_shutdown=0;
CHECK TABLE t1;
Table Op Msg_type Msg_text
test.t1 check status OK
+SHOW ENGINE INNODB STATUS;
+Type Name Status
+InnoDB insert 79, delete mark 1
DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/t/innodb-change-buffer-recovery-master.opt b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery-master.opt
index 97b259ee047..e5d7090c883 100644
--- a/mysql-test/suite/innodb/t/innodb-change-buffer-recovery-master.opt
+++ b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery-master.opt
@@ -1,2 +1 @@
---log-error=$MYSQLTEST_VARDIR/tmp/my_restart.err
--innodb_buffer_pool_size=24M
diff --git a/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
index d8cc21c550c..79d9cc814a0 100644
--- a/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
+++ b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
@@ -11,6 +11,12 @@
--source include/not_valgrind.inc
# This test is slow on buildbot.
--source include/big_test.inc
+--source include/have_sequence.inc
+
+call mtr.add_suppression("InnoDB: innodb_read_only prevents crash recovery");
+call mtr.add_suppression("Plugin initialization aborted at srv0start\\.cc");
+call mtr.add_suppression("Plugin 'InnoDB'");
+FLUSH TABLES;
CREATE TABLE t1(
a INT AUTO_INCREMENT PRIMARY KEY,
@@ -27,25 +33,12 @@ ENGINE=InnoDB STATS_PERSISTENT=0;
# change buffering is possible, so that the change buffer will be used
# whenever possible.
SET GLOBAL innodb_change_buffering_debug = 1;
-let SEARCH_FILE = $MYSQLTEST_VARDIR/tmp/my_restart.err;
+let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err;
# Create enough rows for the table, so that the change buffer will be
# used for modifying the secondary index page. There must be multiple
# index pages, because changes to the root page are never buffered.
-INSERT INTO t1 VALUES(0,'x',1);
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
-INSERT INTO t1 SELECT 0,b,c FROM t1;
+INSERT INTO t1 SELECT 0,'x',1 FROM seq_1_to_8192;
BEGIN;
SELECT b FROM t1 LIMIT 3;
@@ -63,10 +56,26 @@ SET DEBUG_DBUG='+d,crash_after_log_ibuf_upd_inplace';
SELECT b FROM t1 LIMIT 3;
disconnect con1;
connection default;
-
let SEARCH_PATTERN=Wrote log record for ibuf update in place operation;
--source include/search_pattern_in_file.inc
+
+--let $restart_parameters= --innodb-read-only
--source include/start_mysqld.inc
+CHECK TABLE t1;
+--source include/shutdown_mysqld.inc
+let SEARCH_PATTERN=innodb_read_only prevents crash recovery;
+--source include/search_pattern_in_file.inc
+--let $restart_parameters= --innodb-force-recovery=5
+--source include/start_mysqld.inc
+SELECT * FROM t1 LIMIT 1;
+replace_regex /.*operations:.* (insert.*), delete \d.*discarded .*/\1/;
+SHOW ENGINE INNODB STATUS;
+# Slow shutdown will not merge the changes due to innodb_force_recovery=5.
+SET GLOBAL innodb_fast_shutdown=0;
+--let $restart_parameters=
+--source include/restart_mysqld.inc
CHECK TABLE t1;
+replace_regex /.*operations:.* (insert.*), delete \d.*discarded .*/\1/;
+SHOW ENGINE INNODB STATUS;
DROP TABLE t1;