# # MDEV-35446 # # Test BF abort of a transaction under PS protocol, after # a statement is prepared (and the diagnostics area is # disabled). # --source include/have_debug_sync.inc --source include/galera_cluster.inc # # Setup: bf_trx executes in node_1 and will BF abort victim_trx. # --connect bf_trx, 127.0.0.1, root, , test, $NODE_MYPORT_1 --connect victim_trx, 127.0.0.1, root, , test, $NODE_MYPORT_2 --connect node_2_ctrl, 127.0.0.1, root, , test, $NODE_MYPORT_2 CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB; --connection victim_trx START TRANSACTION; INSERT INTO t1 VALUES (2), (1); --connection node_2_ctrl SET GLOBAL debug_dbug = '+d,sync.wsrep_apply_cb'; --connection bf_trx INSERT INTO t1 VALUES (1), (2); --connection node_2_ctrl SET DEBUG_SYNC = "now WAIT_FOR sync.wsrep_apply_cb_reached"; SET GLOBAL debug_dbug = ''; # # COMMIT the victim_trx and expect a deadlock error. # Here we park the client in a sync point at the end of prepare # command (COM_STMT_PREPARE), where the diagnostics area of the # client has already been disabled. The client signals the # applier to continue and will be BF aborted. # If bug is present, the transaction is aborted, but the COMMIT # statement succeeds (instead of returning deadlock error). # --connection victim_trx --disable_ps_protocol SET DEBUG_SYNC = "wsrep_at_dispatch_end_before_result SIGNAL signal.wsrep_apply_cb WAIT_FOR bf_abort"; --enable_ps_protocol --error ER_LOCK_DEADLOCK COMMIT; # # Cleanup # SET DEBUG_SYNC = 'RESET'; DROP TABLE t1;