mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
701 lines
15 KiB
Text
701 lines
15 KiB
Text
#
|
||
# WL#1756
|
||
#
|
||
-- source include/have_innodb.inc
|
||
|
||
--source include/not_embedded.inc
|
||
|
||
# Save the initial number of concurrent sessions
|
||
--source include/count_sessions.inc
|
||
|
||
call mtr.add_suppression("Deadlock found when trying to get lock; try restarting transaction");
|
||
|
||
--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_OUTSIDE
|
||
xa commit 'testb',0x2030405060,11;
|
||
xa rollback 'testa','testb';
|
||
|
||
--error ER_PARSE_ERROR
|
||
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
|
||
|
||
select * from t1;
|
||
disconnect con1;
|
||
--source include/wait_until_count_sessions.inc
|
||
xa rollback 'testb',0x2030405060,11;
|
||
xa recover;
|
||
|
||
connection default;
|
||
|
||
# MDEV-14593 human-readable XA RECOVER
|
||
xa start 'tr1';
|
||
insert t1 values (40);
|
||
xa end 'tr1';
|
||
xa prepare 'tr1';
|
||
xa recover format='SQL';
|
||
xa rollback 'tr1';
|
||
|
||
xa start 'tr1', 'bq';
|
||
insert t1 values (40);
|
||
xa end 'tr1', 'bq';
|
||
xa prepare 'tr1', 'bq';
|
||
xa recover format='SQL';
|
||
xa rollback 'tr1', 'bq';
|
||
|
||
xa start 'tr1', 'bq', 3;
|
||
insert t1 values (40);
|
||
xa end 'tr1', 'bq', 3;
|
||
xa prepare 'tr1', 'bq', 3;
|
||
xa recover format='SQL';
|
||
xa rollback 'tr1', 'bq', 3;
|
||
|
||
xa start 'tr1#$';
|
||
insert t1 values (40);
|
||
xa end 'tr1#$';
|
||
xa prepare 'tr1#$';
|
||
xa recover format='SQL';
|
||
xa rollback 'tr1#$';
|
||
|
||
xa start 'tr1#$', 'bq';
|
||
insert t1 values (40);
|
||
xa end 'tr1#$', 'bq';
|
||
xa prepare 'tr1#$', 'bq';
|
||
xa recover format='SQL';
|
||
xa rollback 'tr1#$', 'bq';
|
||
|
||
xa start 'tr1#$', 'bq', 3;
|
||
insert t1 values (40);
|
||
xa end 'tr1#$', 'bq', 3;
|
||
xa prepare 'tr1#$', 'bq', 3;
|
||
xa recover format='RAW';
|
||
--error ER_UNKNOWN_EXPLAIN_FORMAT
|
||
xa recover format='PLAIN';
|
||
xa recover format='SQL';
|
||
xa rollback 'tr1#$', 'bq', 3;
|
||
|
||
drop table t1;
|
||
|
||
#
|
||
# 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;
|
||
|
||
|
||
--echo #
|
||
--echo # Bug#56448 Assertion failed: ! is_set() with second xa end
|
||
--echo #
|
||
|
||
XA START 'x';
|
||
XA END 'x';
|
||
# Second XA END caused an assertion.
|
||
--error ER_XAER_RMFAIL
|
||
XA END 'x';
|
||
XA PREPARE 'x';
|
||
# Second XA PREPARE also caused an assertion.
|
||
--error ER_XAER_RMFAIL
|
||
XA PREPARE 'x';
|
||
XA ROLLBACK 'x';
|
||
|
||
|
||
--echo #
|
||
--echo # Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT
|
||
--echo #
|
||
|
||
--disable_warnings
|
||
DROP TABLE IF EXISTS t1;
|
||
--enable_warnings
|
||
|
||
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB;
|
||
INSERT INTO t1 VALUES (1, 1), (2, 2);
|
||
|
||
connect (con1, localhost, root);
|
||
XA START 'a';
|
||
UPDATE t1 SET b= 3 WHERE a=1;
|
||
|
||
connection default;
|
||
XA START 'b';
|
||
UPDATE t1 SET b=4 WHERE a=2;
|
||
--echo # Sending:
|
||
--send UPDATE t1 SET b=5 WHERE a=1
|
||
|
||
connection con1;
|
||
--sleep 1
|
||
--error ER_LOCK_DEADLOCK
|
||
UPDATE t1 SET b=6 WHERE a=2;
|
||
# This used to trigger the assert
|
||
--error ER_XA_RBDEADLOCK
|
||
XA COMMIT 'a';
|
||
|
||
connection default;
|
||
--echo # Reaping: UPDATE t1 SET b=5 WHERE a=1
|
||
--reap
|
||
XA END 'b';
|
||
XA ROLLBACK 'b';
|
||
DROP TABLE t1;
|
||
disconnect con1;
|
||
|
||
|
||
--echo #
|
||
--echo # Bug#11766752 59936: multiple xa assertions - transactional
|
||
--echo # statement fuzzer
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (a INT) engine=InnoDB;
|
||
XA START 'a';
|
||
INSERT INTO t1 VALUES (1);
|
||
|
||
SAVEPOINT savep;
|
||
|
||
XA END 'a';
|
||
--error ER_XAER_RMFAIL
|
||
SELECT * FROM t1;
|
||
--error ER_XAER_RMFAIL
|
||
INSERT INTO t1 VALUES (2);
|
||
--error ER_XAER_RMFAIL
|
||
SAVEPOINT savep;
|
||
--error ER_XAER_RMFAIL
|
||
SET @a=(SELECT * FROM t1);
|
||
|
||
XA PREPARE 'a';
|
||
--error ER_XAER_RMFAIL
|
||
SELECT * FROM t1; # used to cause InnoDB assert
|
||
--error ER_XAER_RMFAIL
|
||
INSERT INTO t1 VALUES (2); # used to cause InnoDB assert
|
||
--error ER_XAER_RMFAIL
|
||
SAVEPOINT savep;
|
||
--error ER_XAER_RMFAIL
|
||
SET @a=(SELECT * FROM t1); # used to cause InnoDB assert
|
||
--error ER_XAER_RMFAIL
|
||
UPDATE t1 SET a=1 WHERE a=2;
|
||
|
||
XA COMMIT 'a';
|
||
SELECT * FROM t1;
|
||
DROP TABLE t1;
|
||
|
||
|
||
--echo #
|
||
--echo # MDEV-14609 XA Transction unable to ROLLBACK TO SAVEPOINT
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (c1 INT) ENGINE=INNODB;
|
||
XA START 'xa1';
|
||
SAVEPOINT savepoint1;
|
||
INSERT INTO t1 (c1) VALUES (1),(2),(3),(4);
|
||
ROLLBACK TO SAVEPOINT savepoint1;
|
||
XA END 'xa1';
|
||
XA ROLLBACK 'xa1';
|
||
DROP TABLE t1;
|
||
|
||
|
||
--echo #
|
||
--echo # Bug#12352846 - TRANS_XA_START(THD*):
|
||
--echo # ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL()
|
||
--echo # FAILED
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||
|
||
INSERT INTO t2 VALUES (1); COMMIT;
|
||
BEGIN;
|
||
INSERT INTO t2 VALUES (2);
|
||
UPDATE t2 SET a=a+2;
|
||
UPDATE t2 SET a=a-1;
|
||
|
||
--connect (con2,localhost,root)
|
||
XA START 'xid1';
|
||
INSERT INTO t1 VALUES (1);
|
||
--echo # Sending:
|
||
--send DELETE FROM t2
|
||
|
||
--connection default
|
||
let $wait_condition=
|
||
SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||
WHERE state = "Updating"
|
||
AND info = "DELETE FROM t2";
|
||
--source include/wait_condition.inc
|
||
--sleep 0.1
|
||
--send DELETE FROM t1
|
||
|
||
--connection con2
|
||
--error ER_LOCK_DEADLOCK
|
||
--reap
|
||
--error ER_XA_RBDEADLOCK
|
||
XA COMMIT 'xid1';
|
||
|
||
connection default;
|
||
|
||
reap;
|
||
COMMIT;
|
||
|
||
connection con2;
|
||
# This caused the assert to be triggered
|
||
XA START 'xid1';
|
||
|
||
XA END 'xid1';
|
||
XA PREPARE 'xid1';
|
||
XA ROLLBACK 'xid1';
|
||
|
||
connection default;
|
||
DROP TABLE t1, t2;
|
||
disconnect con2;
|
||
|
||
|
||
#
|
||
# MDEV 15217 Assertion `thd->transaction.xid_state.xid.is_null()' failed in trans_xa_start.
|
||
#
|
||
CREATE TABLE t1 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
||
CREATE TABLE t2 (pk INT PRIMARY KEY) ENGINE=InnoDB;
|
||
INSERT INTO t2 VALUES (1),(2);
|
||
CREATE TABLE t3 (i INT) ENGINE=InnoDB;
|
||
|
||
XA BEGIN 'xid1';
|
||
REPLACE INTO t1 SELECT * FROM t2;
|
||
|
||
--connect (con1,localhost,root,,test)
|
||
XA BEGIN 'xid2';
|
||
--send
|
||
INSERT INTO t1 SELECT * FROM t2;
|
||
|
||
--connection default
|
||
REPLACE INTO t2 SELECT * FROM t2;
|
||
|
||
--connection con1
|
||
--error 0, ER_LOCK_DEADLOCK, ER_LOCK_WAIT_TIMEOUT
|
||
--reap
|
||
--disconnect con1
|
||
|
||
--connect (con2,localhost,root,,test)
|
||
INSERT INTO t3 VALUES (1);
|
||
XA BEGIN 'xid3';
|
||
|
||
|
||
#Cleanup
|
||
--disconnect con2
|
||
--connection default
|
||
XA END 'xid1';
|
||
XA ROLLBACK 'xid1';
|
||
DROP TABLE t1, t2, t3;
|
||
|
||
--echo #
|
||
--echo # MDEV 15532 XA: Assertion `!log->same_pk' failed in
|
||
--echo # row_log_table_apply_delete
|
||
--echo #
|
||
|
||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||
INSERT INTO t1 VALUES (1),(2);
|
||
|
||
--connect (con1,localhost,root,,test)
|
||
|
||
XA START 'xid';
|
||
UPDATE t1 SET a = 5;
|
||
|
||
--connection default
|
||
SET innodb_lock_wait_timeout= 2, lock_wait_timeout= 2;
|
||
|
||
--error ER_NO_SUCH_TABLE
|
||
ALTER TABLE non_existing_table1;
|
||
|
||
--send ALTER TABLE t1 FORCE;
|
||
|
||
--connection con1
|
||
--error ER_XAER_RMFAIL
|
||
|
||
ALTER TABLE non_existing_table2;
|
||
DELETE FROM t1 LIMIT 1;
|
||
|
||
--connection default
|
||
--error ER_LOCK_WAIT_TIMEOUT
|
||
--reap
|
||
|
||
# Cleanup
|
||
--connection con1
|
||
XA END 'xid';
|
||
XA ROLLBACK 'xid';
|
||
DROP TABLE t1;
|
||
--disconnect con1
|
||
connection default;
|
||
|
||
--echo #
|
||
--echo # MDEV-21766 - Forbid XID with empty 'gtrid'
|
||
--echo #
|
||
CREATE TABLE t1(a INT) ENGINE=InnoDB;
|
||
|
||
--error ER_XAER_INVAL
|
||
XA BEGIN '';
|
||
|
||
XA BEGIN '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
|
||
'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
|
||
INSERT INTO t1 VALUES(1);
|
||
XA END '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
|
||
'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
|
||
XA PREPARE '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
|
||
'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
|
||
XA ROLLBACK '8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x',
|
||
'8bytes1x8bytes2x8bytes3x8bytes4x8bytes5x8bytes6x8bytes7x8bytes8x';
|
||
|
||
SET NAMES utf8;
|
||
--error ER_PARSE_ERROR
|
||
XA BEGIN 'Я_упала_с_сеновала_тормозила_головой'; # 36 characters, 67 bytes
|
||
XA BEGIN 'Я_упaлa_c_сеновала_тормозила_головой'; # 36 characters, 64 bytes
|
||
XA END 'Я_упaлa_c_сеновала_тормозила_головой';
|
||
XA PREPARE 'Я_упaлa_c_сеновала_тормозила_головой';
|
||
XA ROLLBACK 'Я_упaлa_c_сеновала_тормозила_головой';
|
||
SET NAMES default;
|
||
|
||
DROP TABLE t1;
|
||
--echo #
|
||
--echo # MDEV-21659 XA rollback foreign_xid is allowed inside active XA
|
||
--echo # MDEV-21854 - xa commit one phase for already prepared transaction
|
||
--echo # must always error out
|
||
--echo #
|
||
BEGIN;
|
||
--error ER_XAER_OUTSIDE
|
||
XA COMMIT 'unknown';
|
||
--error ER_XAER_OUTSIDE
|
||
XA COMMIT 'unknown' ONE PHASE;
|
||
BEGIN;
|
||
--error ER_XAER_OUTSIDE
|
||
XA ROLLBACK 'unknown';
|
||
ROLLBACK;
|
||
|
||
XA START 'xid1';
|
||
--error ER_XAER_OUTSIDE
|
||
XA COMMIT 'unknown';
|
||
--error ER_XAER_OUTSIDE
|
||
XA COMMIT 'unknown' ONE PHASE;
|
||
--error ER_XAER_OUTSIDE
|
||
XA ROLLBACK 'unknown';
|
||
XA END 'xid1';
|
||
XA PREPARE 'xid1';
|
||
--error ER_XAER_INVAL
|
||
XA COMMIT 'xid1' ONE PHASE;
|
||
XA ROLLBACK 'xid1';
|
||
|
||
|
||
--echo #
|
||
--echo # MDEV-21856 - xid_t::formatID has to be constrained to 4 byte size
|
||
--echo #
|
||
--error ER_PARSE_ERROR
|
||
XA START 'gtrid', 'bqual', 0x80000000;
|
||
|
||
--source include/wait_until_count_sessions.inc
|
||
|
||
--echo #
|
||
--echo # XA states and SHOW commands
|
||
--echo #
|
||
create table t1 (pk int primary key) engine=innodb;
|
||
xa start 'foo';
|
||
insert t1 set pk=1;
|
||
xa end 'foo';
|
||
xa prepare 'foo';
|
||
show status like 'foo';
|
||
--query_vertical select table_name,table_comment from information_schema.tables where table_schema='test'
|
||
--query_vertical select table_name,table_rows,table_comment from information_schema.tables where table_schema='test'
|
||
xa commit 'foo';
|
||
drop table t1;
|
||
|
||
--echo #
|
||
--echo # MDEV-22445 Crash on HANDLER READ NEXT after XA PREPARE
|
||
--echo #
|
||
|
||
CREATE TABLE t (a INT KEY) ENGINE=InnoDB;
|
||
HANDLER t OPEN AS t;
|
||
XA START '0';
|
||
SELECT * FROM t;
|
||
XA END '0';
|
||
XA PREPARE '0';
|
||
--error ER_XAER_RMFAIL
|
||
HANDLER t READ NEXT;
|
||
|
||
--echo # Cleanup
|
||
XA COMMIT '0';
|
||
DROP TABLE t;
|
||
|
||
--echo #
|
||
--echo # End of 10.2 tests
|
||
--echo #
|
||
|
||
#
|
||
# MDEV-22002 Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())'
|
||
# failed upon CREATE TEMPORARY SEQUENCE under XA
|
||
#
|
||
|
||
XA BEGIN 'xid';
|
||
|
||
--error ER_XAER_RMFAIL
|
||
CREATE TEMPORARY SEQUENCE s;
|
||
|
||
XA END 'xid';
|
||
|
||
XA ROLLBACK 'xid';
|
||
|
||
XA BEGIN 'xid';
|
||
|
||
--error ER_XAER_RMFAIL
|
||
CREATE SEQUENCE s;
|
||
|
||
XA END 'xid';
|
||
|
||
XA ROLLBACK 'xid';
|
||
|
||
--echo #
|
||
--echo # End of 10.3 tests
|
||
--echo #
|
||
|
||
--echo #
|
||
--echo # Start of 10.5 tests
|
||
--echo #
|
||
|
||
--echo # MDEV-7974 related
|
||
--echo # Check XA state when lock_wait_timeout happens
|
||
--echo # More tests added to flush_read_lock.test
|
||
connect (con_tmp,localhost,root,,);
|
||
set session lock_wait_timeout=1;
|
||
create table asd (a int) engine=innodb;
|
||
xa start 'test1';
|
||
insert into asd values(1);
|
||
xa end 'test1';
|
||
connection default;
|
||
flush table with read lock;
|
||
connection con_tmp;
|
||
--echo # PREPARE error will do auto rollback.
|
||
--ERROR ER_LOCK_WAIT_TIMEOUT
|
||
xa prepare 'test1';
|
||
show errors;
|
||
connection default;
|
||
unlock tables;
|
||
|
||
connection con_tmp;
|
||
xa start 'test1';
|
||
insert into asd values(1);
|
||
xa end 'test1';
|
||
xa prepare 'test1';
|
||
connection default;
|
||
flush tables with read lock;
|
||
connection con_tmp;
|
||
--echo # LOCK error during ROLLBACK will not alter transaction state.
|
||
--ERROR ER_LOCK_WAIT_TIMEOUT
|
||
xa rollback 'test1';
|
||
show errors;
|
||
xa recover;
|
||
--echo # LOCK error during COMMIT will not alter transaction state.
|
||
--ERROR ER_LOCK_WAIT_TIMEOUT
|
||
xa commit 'test1';
|
||
show errors;
|
||
xa recover;
|
||
connection default;
|
||
unlock tables;
|
||
connection con_tmp;
|
||
xa rollback 'test1';
|
||
xa recover;
|
||
drop table asd;
|
||
disconnect con_tmp;
|
||
--source include/wait_until_disconnected.inc
|
||
connection default;
|
||
|
||
--echo #
|
||
--echo # End of 10.5 tests
|
||
--echo #
|