# # MW-329F Fix incorrect affected rows count after replay. # # This is a version of MW-329 without the infinite loop that # in the original test is closed by killing the connection. # --source include/galera_cluster.inc --source include/have_innodb.inc CREATE TABLE t1 (f1 INTEGER, f2 CHAR(20) DEFAULT 'abc') ENGINE=InnoDB; # We start with a populated table INSERT INTO t1 (f1) VALUES (1),(65535); # # Run concurrent INSERTs # DELIMITER |; CREATE PROCEDURE proc_insert (repeat_count int) BEGIN DECLARE current_num int; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END; SET current_num = 0; SET SESSION wsrep_sync_wait = 0; WHILE current_num < repeat_count do INSERT INTO t1 (f1) VALUES (FLOOR( 1 + RAND( ) * 65535 )); SELECT SLEEP(0.1); SET current_num = current_num + 1; END WHILE; END| DELIMITER ;| --connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1 --connection node_1b --let $connection_id = `SELECT CONNECTION_ID()` --disable_query_log --disable_result_log --send CALL proc_insert(500); # # Run concurrent UPDATEs. We expect that each UPDATE will report that # some rows were matched and updated # --connection node_2 --let $count = 2 --let $wsrep_local_replays_old = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'` while ($count) { --let $signature = `SELECT LEFT(MD5(RAND()), 10)` --disable_query_log --error 0,ER_LOCK_DEADLOCK --eval UPDATE t1 SET f2 = '$signature' --enable_query_log --let $row_count = `SELECT ROW_COUNT()` if (`SELECT @@error_count = 0`) { if (`SELECT $row_count = 0`) { --die ROW_COUNT() = 0 } } # # Ensure at least one replay happens # --let $wsrep_replays = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'` --disable_query_log if (`SELECT $wsrep_replays - $wsrep_local_replays_old > 0`) { --dec $count } --enable_query_log } # # Confirm that some transaction replays occurred # --let $wsrep_local_replays_new = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_replays'` --disable_query_log --eval SELECT $wsrep_local_replays_new - $wsrep_local_replays_old > 0 AS wsrep_local_replays; --enable_query_log # # getting execution results for --send # --connection node_1b --error 0,1317,2013,2026 --reap --enable_query_log --enable_result_log --connection node_1 DROP PROCEDURE proc_insert; DROP TABLE t1; --disconnect node_1b # Due to MW-330, Multiple "conflict state 3 after post commit" warnings if table is dropped while SP is running CALL mtr.add_suppression("WSREP: .* conflict state after post commit "); set global innodb_status_output=Default;