# # WL#1756 # -- source include/have_innodb.inc # Save the initial number of concurrent sessions --source include/count_sessions.inc --disable_warnings drop table if exists t1, t2; --enable_warnings create table t1 (a int) engine=innodb; xa start 'test1'; insert t1 values (10); xa end 'test1'; xa prepare 'test1'; xa rollback 'test1'; select * from t1; xa start 'test2'; --error ER_XAER_RMFAIL xa start 'test-bad'; insert t1 values (20); --error ER_XAER_RMFAIL xa prepare 'test2'; xa end 'test2'; xa prepare 'test2'; xa commit 'test2'; select * from t1; xa start 'testa','testb'; insert t1 values (30); --error ER_XAER_RMFAIL commit; xa end 'testa','testb'; --error ER_XAER_RMFAIL begin; --error ER_XAER_RMFAIL create table t2 (a int); connect (con1,localhost,root,,); connection con1; --error ER_XAER_DUPID xa start 'testa','testb'; --error ER_XAER_DUPID xa start 'testa','testb', 123; # gtrid [ , bqual [ , formatID ] ] xa start 0x7465737462, 0x2030405060, 0xb; insert t1 values (40); xa end 'testb',' 0@P`',11; xa prepare 'testb',0x2030405060,11; --error ER_XAER_RMFAIL start transaction; xa recover; # uncomment the line below when binlog will be able to prepare #disconnect con1; connection default; xa prepare 'testa','testb'; xa recover; --error ER_XAER_NOTA xa commit 'testb',0x2030405060,11; xa rollback 'testa','testb'; --error ER_PARSE_ERROR xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'; select * from t1; drop table t1; disconnect con1; # # Bug#28323: Server crashed in xid cache operations # --disable_warnings drop table if exists t1; --enable_warnings create table t1(a int, b int, c varchar(20), primary key(a)) engine = innodb; insert into t1 values(1, 1, 'a'); insert into t1 values(2, 2, 'b'); connect (con1,localhost,root,,); connect (con2,localhost,root,,); --connection con1 xa start 'a','b'; update t1 set c = 'aa' where a = 1; --connection con2 xa start 'a','c'; update t1 set c = 'bb' where a = 2; --connection con1 --send update t1 set c = 'bb' where a = 2 --connection con2 --sleep 1 --error ER_LOCK_DEADLOCK update t1 set c = 'aa' where a = 1; select count(*) from t1; --error ER_XA_RBDEADLOCK xa end 'a','c'; xa rollback 'a','c'; --disconnect con2 connect (con3,localhost,root,,); --connection con3 xa start 'a','c'; --disconnect con1 --disconnect con3 --connection default drop table t1; --echo # --echo # BUG#51342 - more xid crashing --echo # CREATE TABLE t1(a INT) ENGINE=InnoDB; XA START 'x'; SET SESSION autocommit=0; INSERT INTO t1 VALUES(1); --error ER_XAER_RMFAIL SET SESSION autocommit=1; SELECT @@autocommit; INSERT INTO t1 VALUES(1); XA END 'x'; XA COMMIT 'x' ONE PHASE; DROP TABLE t1; SET SESSION autocommit=1; --echo End of 5.0 tests # # Bug#44672: Assertion failed: thd->transaction.xid_state.xid.is_null() # xa start 'a'; xa end 'a'; xa rollback 'a'; xa start 'a'; xa end 'a'; xa rollback 'a'; # # Bug#45548: XA transaction without access to InnoDB tables crashes the server # xa start 'a'; xa end 'a'; xa prepare 'a'; xa commit 'a'; xa start 'a'; xa end 'a'; xa prepare 'a'; xa commit 'a'; # # BUG#43171 - Assertion failed: thd->transaction.xid_state.xid.is_null() # CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB; INSERT INTO t1 VALUES(1),(2); connect(con1,localhost,root,,); # Part 1: Prepare to test XA START after regular transaction deadlock BEGIN; UPDATE t1 SET a=3 WHERE a=1; connection default; BEGIN; UPDATE t1 SET a=4 WHERE a=2; connection con1; let $conn_id= `SELECT CONNECTION_ID()`; SEND UPDATE t1 SET a=5 WHERE a=2; connection default; let $wait_timeout= 2; let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID=$conn_id AND STATE='Searching rows for update'; --source include/wait_condition.inc --error ER_LOCK_DEADLOCK UPDATE t1 SET a=5 WHERE a=1; ROLLBACK; # Part 2: Prepare to test XA START after XA transaction deadlock connection con1; REAP; ROLLBACK; BEGIN; UPDATE t1 SET a=3 WHERE a=1; connection default; XA START 'xid1'; UPDATE t1 SET a=4 WHERE a=2; connection con1; SEND UPDATE t1 SET a=5 WHERE a=2; connection default; let $wait_timeout= 2; let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID=$conn_id AND STATE='Searching rows for update'; --source include/wait_condition.inc --error ER_LOCK_DEADLOCK UPDATE t1 SET a=5 WHERE a=1; --error ER_XA_RBDEADLOCK XA END 'xid1'; XA ROLLBACK 'xid1'; XA START 'xid1'; XA END 'xid1'; XA ROLLBACK 'xid1'; disconnect con1; DROP TABLE t1; # Wait till all disconnects are completed --source include/wait_until_count_sessions.inc