Commit 2b60afe8 authored by Aleksey Midenkov's avatar Aleksey Midenkov

SQL: TRT fix for crash_commit_after [#305, #302]

Tests affected: innodb.group_commit_crash (verbosity improved)
parent ab049501
...@@ -5,14 +5,15 @@ d CHAR(255), ...@@ -5,14 +5,15 @@ d CHAR(255),
id INT, id INT,
PRIMARY KEY(id)) ENGINE=InnoDB; PRIMARY KEY(id)) ENGINE=InnoDB;
create table t2 like t1; create table t2 like t1;
create procedure setcrash(IN i INT) create function getcrash(i INT)
returns VARCHAR(255)
begin begin
CASE i CASE i
WHEN 1 THEN SET SESSION debug_dbug="d,crash_commit_after_prepare"; WHEN 1 THEN RETURN "crash_commit_after_prepare";
WHEN 2 THEN SET SESSION debug_dbug="d,crash_commit_after_log"; WHEN 2 THEN RETURN "crash_commit_after_log";
WHEN 3 THEN SET SESSION debug_dbug="d,crash_commit_before_unlog"; WHEN 3 THEN RETURN "crash_commit_before_unlog";
WHEN 4 THEN SET SESSION debug_dbug="d,crash_commit_after"; WHEN 4 THEN RETURN "crash_commit_after";
WHEN 5 THEN SET SESSION debug_dbug="d,crash_commit_before"; WHEN 5 THEN RETURN "crash_commit_before";
ELSE BEGIN END; ELSE BEGIN END;
END CASE; END CASE;
end // end //
...@@ -31,9 +32,12 @@ SET binlog_format= mixed; ...@@ -31,9 +32,12 @@ SET binlog_format= mixed;
RESET MASTER; RESET MASTER;
START TRANSACTION; START TRANSACTION;
insert into t1 select * from t2; insert into t1 select * from t2;
call setcrash(5); SET @crash= getcrash(5);
SET SESSION debug_dbug=concat("d,", @crash);
COMMIT; COMMIT;
Got one of the listed errors Got one of the listed errors
CRASH_POINT
crash_commit_before
SELECT * FROM t1 ORDER BY id; SELECT * FROM t1 ORDER BY id;
a b c d id a b c d id
SHOW BINLOG EVENTS LIMIT 4,1; SHOW BINLOG EVENTS LIMIT 4,1;
...@@ -43,9 +47,12 @@ SET binlog_format= mixed; ...@@ -43,9 +47,12 @@ SET binlog_format= mixed;
RESET MASTER; RESET MASTER;
START TRANSACTION; START TRANSACTION;
insert into t1 select * from t2; insert into t1 select * from t2;
call setcrash(4); SET @crash= getcrash(4);
SET SESSION debug_dbug=concat("d,", @crash);
COMMIT; COMMIT;
Got one of the listed errors Got one of the listed errors
CRASH_POINT
crash_commit_after
SELECT * FROM t1 ORDER BY id; SELECT * FROM t1 ORDER BY id;
a b c d id a b c d id
a b c d 1 a b c d 1
...@@ -66,9 +73,12 @@ SET binlog_format= mixed; ...@@ -66,9 +73,12 @@ SET binlog_format= mixed;
RESET MASTER; RESET MASTER;
START TRANSACTION; START TRANSACTION;
insert into t1 select * from t2; insert into t1 select * from t2;
call setcrash(3); SET @crash= getcrash(3);
SET SESSION debug_dbug=concat("d,", @crash);
COMMIT; COMMIT;
Got one of the listed errors Got one of the listed errors
CRASH_POINT
crash_commit_before_unlog
SELECT * FROM t1 ORDER BY id; SELECT * FROM t1 ORDER BY id;
a b c d id a b c d id
a b c d 1 a b c d 1
...@@ -89,9 +99,12 @@ SET binlog_format= mixed; ...@@ -89,9 +99,12 @@ SET binlog_format= mixed;
RESET MASTER; RESET MASTER;
START TRANSACTION; START TRANSACTION;
insert into t1 select * from t2; insert into t1 select * from t2;
call setcrash(2); SET @crash= getcrash(2);
SET SESSION debug_dbug=concat("d,", @crash);
COMMIT; COMMIT;
Got one of the listed errors Got one of the listed errors
CRASH_POINT
crash_commit_after_log
SELECT * FROM t1 ORDER BY id; SELECT * FROM t1 ORDER BY id;
a b c d id a b c d id
a b c d 1 a b c d 1
...@@ -112,9 +125,12 @@ SET binlog_format= mixed; ...@@ -112,9 +125,12 @@ SET binlog_format= mixed;
RESET MASTER; RESET MASTER;
START TRANSACTION; START TRANSACTION;
insert into t1 select * from t2; insert into t1 select * from t2;
call setcrash(1); SET @crash= getcrash(1);
SET SESSION debug_dbug=concat("d,", @crash);
COMMIT; COMMIT;
Got one of the listed errors Got one of the listed errors
CRASH_POINT
crash_commit_after_prepare
SELECT * FROM t1 ORDER BY id; SELECT * FROM t1 ORDER BY id;
a b c d id a b c d id
SHOW BINLOG EVENTS LIMIT 4,1; SHOW BINLOG EVENTS LIMIT 4,1;
...@@ -122,4 +138,4 @@ Log_name Pos Event_type Server_id End_log_pos Info ...@@ -122,4 +138,4 @@ Log_name Pos Event_type Server_id End_log_pos Info
delete from t1; delete from t1;
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
DROP PROCEDURE setcrash; DROP FUNCTION getcrash;
...@@ -17,14 +17,15 @@ CREATE TABLE t1(a CHAR(255), ...@@ -17,14 +17,15 @@ CREATE TABLE t1(a CHAR(255),
PRIMARY KEY(id)) ENGINE=InnoDB; PRIMARY KEY(id)) ENGINE=InnoDB;
create table t2 like t1; create table t2 like t1;
delimiter //; delimiter //;
create procedure setcrash(IN i INT) create function getcrash(i INT)
returns VARCHAR(255)
begin begin
CASE i CASE i
WHEN 1 THEN SET SESSION debug_dbug="d,crash_commit_after_prepare"; WHEN 1 THEN RETURN "crash_commit_after_prepare";
WHEN 2 THEN SET SESSION debug_dbug="d,crash_commit_after_log"; WHEN 2 THEN RETURN "crash_commit_after_log";
WHEN 3 THEN SET SESSION debug_dbug="d,crash_commit_before_unlog"; WHEN 3 THEN RETURN "crash_commit_before_unlog";
WHEN 4 THEN SET SESSION debug_dbug="d,crash_commit_after"; WHEN 4 THEN RETURN "crash_commit_after";
WHEN 5 THEN SET SESSION debug_dbug="d,crash_commit_before"; WHEN 5 THEN RETURN "crash_commit_before";
ELSE BEGIN END; ELSE BEGIN END;
END CASE; END CASE;
end // end //
...@@ -53,8 +54,8 @@ while ($numtests) ...@@ -53,8 +54,8 @@ while ($numtests)
# Write file to make mysql-test-run.pl expect crash # Write file to make mysql-test-run.pl expect crash
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect --exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
eval call setcrash($numtests); eval SET @crash= getcrash($numtests);
SET SESSION debug_dbug=concat("d,", @crash);
# Run the crashing query # Run the crashing query
--error 2006,2013 --error 2006,2013
COMMIT; COMMIT;
...@@ -62,6 +63,10 @@ while ($numtests) ...@@ -62,6 +63,10 @@ while ($numtests)
# Poll the server waiting for it to be back online again. # Poll the server waiting for it to be back online again.
--source include/wait_until_connected_again.inc --source include/wait_until_connected_again.inc
--disable_query_log
eval SET @crash= getcrash($numtests);
SELECT @crash as CRASH_POINT;
--enable_query_log
# table and binlog should be in sync. # table and binlog should be in sync.
SELECT * FROM t1 ORDER BY id; SELECT * FROM t1 ORDER BY id;
--replace_column 2 # 5 # --replace_column 2 # 5 #
...@@ -75,4 +80,4 @@ while ($numtests) ...@@ -75,4 +80,4 @@ while ($numtests)
# final cleanup # final cleanup
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
DROP PROCEDURE setcrash; DROP FUNCTION getcrash;
...@@ -1428,7 +1428,7 @@ int ha_commit_trans(THD *thd, bool all) ...@@ -1428,7 +1428,7 @@ int ha_commit_trans(THD *thd, bool all)
if (trt.update()) if (trt.update())
goto err; goto err;
if (all) if (all)
trans_commit_stmt(thd); commit_one_phase_2(thd, false, &thd->transaction.stmt, false);
break; break;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment