# statement rollback for SR transaction causes slave crash for inconsistency # We test the following: # 1. Create a transaction that is blocked by an SR transaction # 2. Force the SR transaction to have a statement rollback # --source include/galera_cluster.inc --source include/have_innodb.inc --source include/have_debug_sync.inc --connection node_1 CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB; INSERT INTO t2 VALUES (6),(7),(8),(9),(10),(1); --connection node_2 SET GLOBAL wsrep_slave_threads = 2; SET GLOBAL debug_dbug = 'd,sync.wsrep_apply_cb'; # Begin SR transaction --connection node_1 SET SESSION wsrep_trx_fragment_size = 1; SET AUTOCOMMIT=OFF; START TRANSACTION; INSERT INTO t1 VALUES (1), (2), (3), (4), (5); # Begin non-SR transaction that will block waiting for the SR transaction --connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1 --connection node_1a SET AUTOCOMMIT=OFF; START TRANSACTION; --send INSERT INTO t1 VALUES (1), (2), (3), (4), (5); # Cause the SR transaction to fail with a duplicate key error --connection node_1 --send INSERT INTO t1 SELECT * FROM t2; # Continue and commit the non-SR transaction. --connection node_1a --reap INSERT INTO t1 VALUES (6), (7), (8), (9), (10); COMMIT; --connection node_1 --error ER_LOCK_DEADLOCK,ER_DUP_ENTRY --reap --connection node_2 SET GLOBAL wsrep_slave_threads = 1; SET GLOBAL debug_dbug = ''; SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb'; SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb'; SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb'; SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb'; SELECT COUNT(*) = 10 FROM t1; DROP TABLE t1; DROP TABLE t2; SET DEBUG_SYNC = RESET;