MWL#116: Add two more test cases:
- Test internal 2-phase commit when binlog is enabled globally, but disabled in the session - Test crashing at various points during commit
This commit is contained in:
parent
805f009360
commit
a2d921be36
120
mysql-test/r/group_commit_crash.result
Normal file
120
mysql-test/r/group_commit_crash.result
Normal file
@ -0,0 +1,120 @@
|
||||
CREATE TABLE t1(a CHAR(255),
|
||||
b CHAR(255),
|
||||
c CHAR(255),
|
||||
d CHAR(255),
|
||||
id INT AUTO_INCREMENT,
|
||||
PRIMARY KEY(id)) ENGINE=InnoDB;
|
||||
create table t2 like t1;
|
||||
create procedure setcrash(IN i INT)
|
||||
begin
|
||||
CASE i
|
||||
WHEN 1 THEN SET SESSION debug="d,crash_commit_after_prepare";
|
||||
WHEN 2 THEN SET SESSION debug="d,crash_commit_after_log";
|
||||
WHEN 3 THEN SET SESSION debug="d,crash_commit_before_unlog";
|
||||
WHEN 4 THEN SET SESSION debug="d,crash_commit_after";
|
||||
WHEN 5 THEN SET SESSION debug="d,crash_commit_before";
|
||||
ELSE BEGIN END;
|
||||
END CASE;
|
||||
end //
|
||||
FLUSH TABLES;
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
RESET MASTER;
|
||||
START TRANSACTION;
|
||||
insert into t1 select * from t2;
|
||||
call setcrash(5);
|
||||
COMMIT;
|
||||
Got one of the listed errors
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
a b c d id
|
||||
SHOW BINLOG EVENTS LIMIT 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
delete from t1;
|
||||
RESET MASTER;
|
||||
START TRANSACTION;
|
||||
insert into t1 select * from t2;
|
||||
call setcrash(4);
|
||||
COMMIT;
|
||||
Got one of the listed errors
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
a b c d id
|
||||
a b c d 1
|
||||
a b c d 2
|
||||
a b c d 3
|
||||
a b c d 4
|
||||
a b c d 5
|
||||
a b c d 6
|
||||
a b c d 7
|
||||
a b c d 8
|
||||
a b c d 9
|
||||
a b c d 10
|
||||
SHOW BINLOG EVENTS LIMIT 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 174 Query 1 268 use `test`; insert into t1 select * from t2
|
||||
delete from t1;
|
||||
RESET MASTER;
|
||||
START TRANSACTION;
|
||||
insert into t1 select * from t2;
|
||||
call setcrash(3);
|
||||
COMMIT;
|
||||
Got one of the listed errors
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
a b c d id
|
||||
a b c d 1
|
||||
a b c d 2
|
||||
a b c d 3
|
||||
a b c d 4
|
||||
a b c d 5
|
||||
a b c d 6
|
||||
a b c d 7
|
||||
a b c d 8
|
||||
a b c d 9
|
||||
a b c d 10
|
||||
SHOW BINLOG EVENTS LIMIT 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 174 Query 1 268 use `test`; insert into t1 select * from t2
|
||||
delete from t1;
|
||||
RESET MASTER;
|
||||
START TRANSACTION;
|
||||
insert into t1 select * from t2;
|
||||
call setcrash(2);
|
||||
COMMIT;
|
||||
Got one of the listed errors
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
a b c d id
|
||||
a b c d 1
|
||||
a b c d 2
|
||||
a b c d 3
|
||||
a b c d 4
|
||||
a b c d 5
|
||||
a b c d 6
|
||||
a b c d 7
|
||||
a b c d 8
|
||||
a b c d 9
|
||||
a b c d 10
|
||||
SHOW BINLOG EVENTS LIMIT 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 174 Query 1 268 use `test`; insert into t1 select * from t2
|
||||
delete from t1;
|
||||
RESET MASTER;
|
||||
START TRANSACTION;
|
||||
insert into t1 select * from t2;
|
||||
call setcrash(1);
|
||||
COMMIT;
|
||||
Got one of the listed errors
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
a b c d id
|
||||
SHOW BINLOG EVENTS LIMIT 2,1;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
delete from t1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP PROCEDURE setcrash;
|
31
mysql-test/suite/pbxt/r/pbxt_xa_binlog.result
Normal file
31
mysql-test/suite/pbxt/r/pbxt_xa_binlog.result
Normal file
@ -0,0 +1,31 @@
|
||||
drop table if exists t1, t2;
|
||||
SET binlog_format = 'mixed';
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb;
|
||||
CREATE TABLE t2 (b INT PRIMARY KEY) ENGINE=pbxt;
|
||||
BEGIN;
|
||||
SELECT @@log_bin;
|
||||
@@log_bin
|
||||
1
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2);
|
||||
COMMIT;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
select * from t2;
|
||||
b
|
||||
2
|
||||
SET sql_log_bin = 0;
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t2 VALUES (4);
|
||||
COMMIT;
|
||||
select * from t1 order by a;
|
||||
a
|
||||
1
|
||||
3
|
||||
select * from t2 order by b;
|
||||
b
|
||||
2
|
||||
4
|
||||
drop table t1, t2;
|
||||
drop database pbxt;
|
31
mysql-test/suite/pbxt/t/pbxt_xa_binlog.test
Normal file
31
mysql-test/suite/pbxt/t/pbxt_xa_binlog.test
Normal file
@ -0,0 +1,31 @@
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
SET binlog_format = 'mixed';
|
||||
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb;
|
||||
CREATE TABLE t2 (b INT PRIMARY KEY) ENGINE=pbxt;
|
||||
BEGIN;
|
||||
# verify that binlog is on
|
||||
SELECT @@log_bin;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2);
|
||||
COMMIT;
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
|
||||
# Test 2-phase commit when we disable binlogging.
|
||||
SET sql_log_bin = 0;
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t2 VALUES (4);
|
||||
COMMIT;
|
||||
select * from t1 order by a;
|
||||
select * from t2 order by b;
|
||||
|
||||
drop table t1, t2;
|
||||
drop database pbxt;
|
||||
|
1
mysql-test/t/group_commit_crash-master.opt
Normal file
1
mysql-test/t/group_commit_crash-master.opt
Normal file
@ -0,0 +1 @@
|
||||
--skip-stack-trace --skip-core-file
|
80
mysql-test/t/group_commit_crash.test
Normal file
80
mysql-test/t/group_commit_crash.test
Normal file
@ -0,0 +1,80 @@
|
||||
# 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_innodb.inc
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
let $file_format_check=`SELECT @@innodb_file_format_check`;
|
||||
CREATE TABLE t1(a CHAR(255),
|
||||
b CHAR(255),
|
||||
c CHAR(255),
|
||||
d CHAR(255),
|
||||
id INT AUTO_INCREMENT,
|
||||
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="d,crash_commit_after_prepare";
|
||||
WHEN 2 THEN SET SESSION debug="d,crash_commit_after_log";
|
||||
WHEN 3 THEN SET SESSION debug="d,crash_commit_before_unlog";
|
||||
WHEN 4 THEN SET SESSION debug="d,crash_commit_after";
|
||||
WHEN 5 THEN SET SESSION debug="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;
|
||||
INSERT INTO t2(a, b, c, d) VALUES ('a', 'b', 'c', 'd');
|
||||
}
|
||||
|
||||
--enable_reconnect
|
||||
|
||||
while ($numtests)
|
||||
{
|
||||
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;
|
||||
SHOW BINLOG EVENTS LIMIT 2,1;
|
||||
|
||||
delete from t1;
|
||||
|
||||
dec $numtests;
|
||||
}
|
||||
|
||||
# final cleanup
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP PROCEDURE setcrash;
|
||||
--disable_query_log
|
||||
eval SET GLOBAL innodb_file_format_check=$file_format_check;
|
||||
--enable_query_log
|
Loading…
x
Reference in New Issue
Block a user