mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 10:31:54 +01:00
MDEV-15217 Assertion `thd->transaction.xid_state.xid.is_null()' failed
in trans_xa_start. THD.transaction.xid_state.xid.rm_error should be cleaned as the thread ends.
This commit is contained in:
parent
28777046b4
commit
cd109592ca
3 changed files with 59 additions and 1 deletions
|
@ -270,3 +270,25 @@ XA ROLLBACK 'xid1';
|
||||||
connection default;
|
connection default;
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
disconnect con2;
|
disconnect con2;
|
||||||
|
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';
|
||||||
|
INSERT INTO t1 SELECT * FROM t2;
|
||||||
|
connection default;
|
||||||
|
REPLACE INTO t2 SELECT * FROM t2;
|
||||||
|
connection con1;
|
||||||
|
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||||
|
disconnect con1;
|
||||||
|
connect con2,localhost,root,,test;
|
||||||
|
INSERT INTO t3 VALUES (1);
|
||||||
|
XA BEGIN 'xid3';
|
||||||
|
disconnect con2;
|
||||||
|
connection default;
|
||||||
|
XA END 'xid1';
|
||||||
|
XA ROLLBACK 'xid1';
|
||||||
|
DROP TABLE t1, t2, t3;
|
||||||
|
|
|
@ -394,6 +394,41 @@ DROP TABLE t1, t2;
|
||||||
disconnect con2;
|
disconnect con2;
|
||||||
|
|
||||||
|
|
||||||
# Wait till all disconnects are completed
|
#
|
||||||
|
# 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 ER_LOCK_DEADLOCK
|
||||||
|
--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;
|
||||||
|
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
|
||||||
|
|
|
@ -1462,6 +1462,7 @@ void THD::cleanup(void)
|
||||||
close_temporary_tables();
|
close_temporary_tables();
|
||||||
|
|
||||||
transaction.xid_state.xa_state= XA_NOTR;
|
transaction.xid_state.xa_state= XA_NOTR;
|
||||||
|
transaction.xid_state.rm_error= 0;
|
||||||
trans_rollback(this);
|
trans_rollback(this);
|
||||||
xid_cache_delete(this, &transaction.xid_state);
|
xid_cache_delete(this, &transaction.xid_state);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue