|
|
@ -0,0 +1,70 @@ |
|
|
|
--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; |