233 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			233 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
#
 | 
						|
# 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
 | 
						|
 |