mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 01:04:19 +01:00
67b4a6f576
The combination of --remove_file and --write_file on .expect file creates a race condition which can be hit by MTR which reads the file in a loop. Instead, .expect file should be changed with --append_file. It was fixed in 10.x, but in 5.5 the sporadic failure still affected buildbot. Fixed 3 test files which use the problematic combination
65 lines
2.1 KiB
Text
65 lines
2.1 KiB
Text
--source include/have_innodb.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_debug_sync.inc
|
|
--source include/have_binlog_format_row.inc
|
|
# Valgrind does not work well with test that crashes the server
|
|
--source include/not_valgrind.inc
|
|
|
|
# (We do not need to restore these settings, as we crash the server).
|
|
SET GLOBAL max_binlog_size= 4096;
|
|
SET GLOBAL innodb_flush_log_at_trx_commit= 1;
|
|
RESET MASTER;
|
|
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb;
|
|
|
|
# One connection does an insert that causes a binlog rotate.
|
|
# The rotate is paused after writing new file but before updating index.
|
|
connect(con1,localhost,root,,);
|
|
SET DEBUG_SYNC= "binlog_open_before_update_index SIGNAL con1_ready WAIT_FOR con1_cont";
|
|
SET SESSION debug_dbug="+d,crash_create_critical_before_update_index";
|
|
send INSERT INTO t1 VALUES (1, REPEAT("x", 4100));
|
|
|
|
connection default;
|
|
SET DEBUG_SYNC= "now WAIT_FOR con1_ready";
|
|
|
|
# Another connection creates a prepared transaction.
|
|
# After the transaction is prepared, it will hang waiting for LOCK_log.
|
|
connect(con2,localhost,root,,);
|
|
SET DEBUG_SYNC= "ha_commit_trans_after_prepare SIGNAL con2_ready";
|
|
send INSERT INTO t1 VALUES (2, NULL);
|
|
|
|
connection default;
|
|
SET DEBUG_SYNC= "now WAIT_FOR con2_ready";
|
|
|
|
# Now crash the server in con1, with old binlog closed, new binlog not yet in
|
|
# index, and one transaction in prepared-but-not-committed state.
|
|
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
wait-binlog_mdev342.test
|
|
EOF
|
|
# If con1 manages to race ahead and crash, we can see the crash already in the
|
|
# SET DEBUG_SYNC statement, so need --error here also.
|
|
--error 0,2006,2013
|
|
SET DEBUG_SYNC= "now SIGNAL con1_cont";
|
|
connection con1;
|
|
--error 2006,2013
|
|
reap;
|
|
|
|
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
restart-binlog_mdev342.test
|
|
EOF
|
|
|
|
connection default;
|
|
--enable_reconnect
|
|
--source include/wait_until_connected_again.inc
|
|
|
|
# Check that all transactions are recovered.
|
|
SELECT a FROM t1 ORDER BY a;
|
|
|
|
--source include/show_binary_logs.inc
|
|
--let $binlog_file= master-bin.000001
|
|
--let $binlog_start= 4
|
|
--source include/show_binlog_events.inc
|
|
|
|
# Cleanup
|
|
connection default;
|
|
DROP TABLE t1;
|