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
							 | 
						||
| 
								 | 
							
								
							 |