***MDEV-5914: Parallel replication deadlock due to InnoDB lock conflicts *** include/master-slave.inc [connection master] connection server_2; SET sql_log_bin=0; CALL mtr.add_suppression("Commit failed due to failure of an earlier commit on which this one depends"); SET sql_log_bin=1; SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads; include/stop_slave.inc SET GLOBAL slave_parallel_threads=10; CHANGE MASTER TO master_use_gtid=slave_pos; connection server_1; ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB; CREATE TABLE t4 (a INT PRIMARY KEY, b INT, KEY b_idx(b)) ENGINE=InnoDB; INSERT INTO t4 VALUES (1,NULL), (2,2), (3,NULL), (4,4), (5, NULL), (6, 6); connect con1,127.0.0.1,root,,test,$SERVER_MYPORT_1,; connect con2,127.0.0.1,root,,test,$SERVER_MYPORT_1,; connection con1; SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1'; UPDATE t4 SET b=NULL WHERE a=6; connection server_1; SET debug_sync='now WAIT_FOR master_queued1'; connection con2; SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2'; DELETE FROM t4 WHERE b <= 3; connection server_1; SET debug_sync='now WAIT_FOR master_queued2'; SET debug_sync='now SIGNAL master_cont1'; connection con1; connection con2; SET debug_sync='RESET'; connection server_2; include/start_slave.inc include/stop_slave.inc SELECT * FROM t4 ORDER BY a; a b 1 NULL 3 NULL 4 4 5 NULL 6 NULL connection server_1; DELETE FROM t4; INSERT INTO t4 VALUES (1,NULL), (2,2), (3,NULL), (4,4), (5, NULL), (6, 6); connection con1; SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1'; INSERT INTO t4 VALUES (7, NULL); connection server_1; SET debug_sync='now WAIT_FOR master_queued1'; connection con2; SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2'; DELETE FROM t4 WHERE b <= 3; connection server_1; SET debug_sync='now WAIT_FOR master_queued2'; SET debug_sync='now SIGNAL master_cont1'; connection con1; connection con2; SET debug_sync='RESET'; connection server_2; include/start_slave.inc include/stop_slave.inc SELECT * FROM t4 ORDER BY a; a b 1 NULL 3 NULL 4 4 5 NULL 6 6 7 NULL connection server_2; SET GLOBAL slave_parallel_threads=@old_parallel_threads; include/start_slave.inc SET DEBUG_SYNC= 'RESET'; connection server_1; disconnect con1; disconnect con2; DROP TABLE t4; SET DEBUG_SYNC= 'RESET'; include/rpl_end.inc