Commit a16f4927 authored by Jan Lindström's avatar Jan Lindström

MDEV-22055: Assertion `active() == false' failed in...

MDEV-22055: Assertion `active() == false' failed in wsrep::transaction::start_transaction upon ROLLBACK AND CHAIN

The optional AND CHAIN clause is a convenience for initiating a new
transaction as soon as the old transaction terminates. Therefore,
do not start new transaction if it is already started
at wsrep_start_transaction.
parent 2000d05c
connection node_2;
connection node_1;
ROLLBACK AND CHAIN;
CREATE TABLE t1(a int not null primary key) engine=innodb;
INSERT INTO t1 values (1);
BEGIN;
INSERT INTO t1 values (2);
ROLLBACK AND CHAIN;
SELECT * FROM t1;
a
1
connection node_2;
SET SESSION wsrep_sync_wait=15;
SELECT * FROM t1;
a
1
connection node_1;
DROP TABLE t1;
--source include/galera_cluster.inc
ROLLBACK AND CHAIN;
CREATE TABLE t1(a int not null primary key) engine=innodb;
INSERT INTO t1 values (1);
BEGIN;
INSERT INTO t1 values (2);
ROLLBACK AND CHAIN;
SELECT * FROM t1;
--connection node_2
SET SESSION wsrep_sync_wait=15;
SELECT * FROM t1;
--connection node_1
DROP TABLE t1;
......@@ -133,9 +133,11 @@ static inline size_t wsrep_fragments_certified_for_stmt(THD* thd)
static inline int wsrep_start_transaction(THD* thd, wsrep_trx_id_t trx_id)
{
return (thd->wsrep_cs().state() != wsrep::client_state::s_none ?
thd->wsrep_cs().start_transaction(wsrep::transaction_id(trx_id)) :
0);
if (thd->wsrep_cs().state() != wsrep::client_state::s_none) {
if (wsrep_is_active(thd) == false)
return thd->wsrep_cs().start_transaction(wsrep::transaction_id(trx_id));
}
return 0;
}
/**/
......
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