mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
BUG#16752251 - INNODB DOESN'T REDO-LOG INSERT BUFFER MERGE OPERATION IF
IT IS DONE IN-PLACE Add testcase as innodb-change-buffer-recovery.test
This commit is contained in:
@ -0,0 +1,39 @@
|
||||
#
|
||||
# Bug#69122 - INNODB DOESN'T REDO-LOG INSERT BUFFER MERGE
|
||||
# OPERATION IF IT IS DONE IN-PLACE
|
||||
#
|
||||
SET GLOBAL innodb_change_buffering_debug = 1;
|
||||
CREATE TABLE t1(
|
||||
a INT AUTO_INCREMENT PRIMARY KEY,
|
||||
b CHAR(1),
|
||||
c INT,
|
||||
INDEX(b))
|
||||
ENGINE=InnoDB;
|
||||
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;
|
||||
b
|
||||
x
|
||||
x
|
||||
x
|
||||
BEGIN;
|
||||
DELETE FROM t1 WHERE a=1;
|
||||
INSERT INTO t1 VALUES(1,'X',1);
|
||||
SET DEBUG='+d,crash_after_log_ibuf_upd_inplace';
|
||||
SELECT b FROM t1 LIMIT 3;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
@ -0,0 +1 @@
|
||||
--log-error=$MYSQLTEST_VARDIR/tmp/my_restart.err
|
70
mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
Normal file
70
mysql-test/suite/innodb/t/innodb-change-buffer-recovery.test
Normal file
@ -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='+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;
|
Reference in New Issue
Block a user