summaryrefslogtreecommitdiff
path: root/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test')
-rw-r--r--mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test75
1 files changed, 75 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
new file mode 100644
index 00000000000..1774bb7f796
--- /dev/null
+++ b/mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
@@ -0,0 +1,75 @@
+if (`select plugin_auth_version < "5.6.17" from information_schema.plugins where plugin_name='innodb'`)
+{
+ --skip Not fixed in InnoDB before 5.6.17
+}
+
+--echo #
+--echo # Bug#69122 - INNODB DOESN'T REDO-LOG INSERT BUFFER MERGE
+--echo # OPERATION IF IT IS DONE IN-PLACE
+--echo #
+--source include/have_innodb.inc
+# innodb_change_buffering_debug option is debug only
+--source include/have_debug.inc
+# Embedded server does not support crashing
+--source include/not_embedded.inc
+# DBUG_SUICIDE() hangs under valgrind
+--source include/not_valgrind.inc
+
+# The flag innodb_change_buffering_debug is only available in debug builds.
+# It instructs InnoDB to try to evict pages from the buffer pool when
+# 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;
+
+CREATE TABLE t1(
+ a INT AUTO_INCREMENT PRIMARY KEY,
+ b CHAR(1),
+ c INT,
+ INDEX(b))
+ENGINE=InnoDB;
+
+# 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;
+
+BEGIN;
+SELECT b FROM t1 LIMIT 3;
+
+connect (con1,localhost,root,,);
+connection con1;
+BEGIN;
+DELETE FROM t1 WHERE a=1;
+# This should be buffered, if innodb_change_buffering_debug = 1 is in effect.
+INSERT INTO t1 VALUES(1,'X',1);
+
+SET DEBUG_DBUG='+d,crash_after_log_ibuf_upd_inplace';
+--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+--error 2013
+# This should force a change buffer merge
+SELECT b FROM t1 LIMIT 3;
+
+let SEARCH_PATTERN=Wrote log record for ibuf update in place operation;
+--source include/search_pattern_in_file.inc
+
+# Write file to make mysql-test-run.pl start up the server again
+--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
+--enable_reconnect
+--source include/wait_until_connected_again.inc
+
+CHECK TABLE t1;
+
+# Cleanup
+DROP TABLE t1;