diff options
Diffstat (limited to 'mysql-test/suite/innodb/t/group_commit_crash.test')
-rw-r--r-- | mysql-test/suite/innodb/t/group_commit_crash.test | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/t/group_commit_crash.test b/mysql-test/suite/innodb/t/group_commit_crash.test new file mode 100644 index 00000000..12f7ba20 --- /dev/null +++ b/mysql-test/suite/innodb/t/group_commit_crash.test @@ -0,0 +1,78 @@ +--source include/have_innodb.inc +# Testing group commit by crashing a few times. +# Test adapted from the Facebook patch: lp:mysqlatfacebook +--source include/not_embedded.inc +# Don't test this under valgrind, memory leaks will occur +--source include/not_valgrind.inc + +# Binary must be compiled with debug for crash to occur +--source include/have_debug.inc +--source include/have_log_bin.inc + +CREATE TABLE t1(a CHAR(255), + b CHAR(255), + c CHAR(255), + d CHAR(255), + id INT, + PRIMARY KEY(id)) ENGINE=InnoDB; +create table t2 like t1; +delimiter //; +create procedure setcrash(IN i INT) +begin + CASE i + WHEN 1 THEN SET SESSION debug_dbug="d,crash_commit_after_prepare"; + WHEN 2 THEN SET SESSION debug_dbug="d,crash_commit_after_log"; + WHEN 3 THEN SET SESSION debug_dbug="d,crash_commit_before_unlog"; + WHEN 4 THEN SET SESSION debug_dbug="d,crash_commit_after"; + WHEN 5 THEN SET SESSION debug_dbug="d,crash_commit_before"; + ELSE BEGIN END; + END CASE; +end // +delimiter ;// +# Avoid getting a crashed mysql.proc table. +FLUSH TABLES; + +let $numtests = 5; + +let $numinserts = 10; +while ($numinserts) +{ + dec $numinserts; + eval INSERT INTO t2(a, b, c, d, id) VALUES ('a', 'b', 'c', 'd', $numinserts+1); +} + +--enable_reconnect + +while ($numtests) +{ + SET binlog_format= mixed; + RESET MASTER; + + START TRANSACTION; + insert into t1 select * from t2; + # Write file to make mysql-test-run.pl expect crash + --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect + + eval call setcrash($numtests); + + # Run the crashing query + --error 2006,2013 + COMMIT; + + # Poll the server waiting for it to be back online again. + --source include/wait_until_connected_again.inc + + # table and binlog should be in sync. + SELECT * FROM t1 ORDER BY id; +--replace_column 2 # 5 # + SHOW BINLOG EVENTS LIMIT 4,1; + + delete from t1; + + dec $numtests; +} + +# final cleanup +DROP TABLE t1; +DROP TABLE t2; +DROP PROCEDURE setcrash; |