Commit cd109592 authored by Alexey Botchkov's avatar Alexey Botchkov

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.
parent 28777046
......@@ -270,3 +270,25 @@ XA ROLLBACK 'xid1';
connection default;
DROP TABLE t1, t2;
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;
# 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
......@@ -1462,6 +1462,7 @@ void THD::cleanup(void)
close_temporary_tables();
transaction.xid_state.xa_state= XA_NOTR;
transaction.xid_state.rm_error= 0;
trans_rollback(this);
xid_cache_delete(this, &transaction.xid_state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment