mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Merge MDEV-8031 into 10.1
This commit is contained in:
@@ -2215,7 +2215,7 @@ SELECT * FROM t3 WHERE a >= 120 ORDER BY a;
|
||||
SELECT * FROM t3 WHERE a >= 120 ORDER BY a;
|
||||
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug= @old_debug;
|
||||
SET GLOBAL debug_dbug= @old_dbug;
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
@@ -2262,10 +2262,119 @@ SELECT * FROM t3 WHERE a >= 130 ORDER BY a;
|
||||
SELECT * FROM t3 WHERE a >= 130 ORDER BY a;
|
||||
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug= @old_debug;
|
||||
SET GLOBAL debug_dbug= @old_dbug;
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
--echo *** MDEV-8031: Parallel replication stops on "connection killed" error (probably incorrectly handled deadlock kill) ***
|
||||
|
||||
--connection server_1
|
||||
INSERT INTO t3 VALUES (201,0), (202,0);
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_2
|
||||
--source include/sync_with_master_gtid.inc
|
||||
--source include/stop_slave.inc
|
||||
SET @old_dbug= @@GLOBAL.debug_dbug;
|
||||
SET GLOBAL debug_dbug= '+d,inject_mdev8031';
|
||||
|
||||
--connection server_1
|
||||
# We artificially create a situation that hopefully resembles the original
|
||||
# bug which was only seen "in the wild", and only once.
|
||||
# Setup a fake group commit with lots of conflicts that will lead to deadloc
|
||||
# kill. The slave DBUG injection causes the slave to be deadlock killed at
|
||||
# a particular point during the retry, and then later do a small sleep at
|
||||
# another critical point where the prior transaction then has a chance to
|
||||
# complete. Finally an extra KILL check catches an unhandled, lingering
|
||||
# deadlock kill. So rather artificial, but at least it exercises the
|
||||
# relevant code paths.
|
||||
SET @old_dbug= @@SESSION.debug_dbug;
|
||||
SET SESSION debug_dbug="+d,binlog_force_commit_id";
|
||||
|
||||
SET @commit_id= 10200;
|
||||
INSERT INTO t3 VALUES (203, 1);
|
||||
INSERT INTO t3 VALUES (204, 1);
|
||||
INSERT INTO t3 VALUES (205, 1);
|
||||
UPDATE t3 SET b=b+1 WHERE a=201;
|
||||
UPDATE t3 SET b=b+1 WHERE a=201;
|
||||
UPDATE t3 SET b=b+1 WHERE a=201;
|
||||
UPDATE t3 SET b=b+1 WHERE a=202;
|
||||
UPDATE t3 SET b=b+1 WHERE a=202;
|
||||
UPDATE t3 SET b=b+1 WHERE a=202;
|
||||
UPDATE t3 SET b=b+1 WHERE a=202;
|
||||
UPDATE t3 SET b=b+1 WHERE a=203;
|
||||
UPDATE t3 SET b=b+1 WHERE a=203;
|
||||
UPDATE t3 SET b=b+1 WHERE a=204;
|
||||
UPDATE t3 SET b=b+1 WHERE a=204;
|
||||
UPDATE t3 SET b=b+1 WHERE a=204;
|
||||
UPDATE t3 SET b=b+1 WHERE a=203;
|
||||
UPDATE t3 SET b=b+1 WHERE a=205;
|
||||
UPDATE t3 SET b=b+1 WHERE a=205;
|
||||
SET SESSION debug_dbug=@old_dbug;
|
||||
|
||||
SELECT * FROM t3 WHERE a>=200 ORDER BY a;
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_2
|
||||
--source include/start_slave.inc
|
||||
--source include/sync_with_master_gtid.inc
|
||||
|
||||
SELECT * FROM t3 WHERE a>=200 ORDER BY a;
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug= @old_dbug;
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
--echo *** Check getting deadlock killed inside open_binlog() during retry. ***
|
||||
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
SET @old_dbug= @@GLOBAL.debug_dbug;
|
||||
SET GLOBAL debug_dbug= '+d,inject_retry_event_group_open_binlog_kill';
|
||||
SET @old_max= @@GLOBAL.max_relay_log_size;
|
||||
SET GLOBAL max_relay_log_size= 4096;
|
||||
|
||||
--connection server_1
|
||||
SET @old_dbug= @@SESSION.debug_dbug;
|
||||
SET SESSION debug_dbug="+d,binlog_force_commit_id";
|
||||
|
||||
--let $large= `SELECT REPEAT("*", 8192)`
|
||||
SET @commit_id= 10210;
|
||||
--echo Omit long queries that cause relaylog rotations and transaction retries...
|
||||
--disable_query_log
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=201 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=201 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=201 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=202 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=202 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=202 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=202 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=203 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=203 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=204 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=204 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=204 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=203 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=205 /* $large */;
|
||||
eval UPDATE t3 SET b=b+1 WHERE a=205 /* $large */;
|
||||
--enable_query_log
|
||||
SET SESSION debug_dbug=@old_dbug;
|
||||
|
||||
SELECT * FROM t3 WHERE a>=200 ORDER BY a;
|
||||
--source include/save_master_gtid.inc
|
||||
|
||||
--connection server_2
|
||||
--source include/start_slave.inc
|
||||
--source include/sync_with_master_gtid.inc
|
||||
|
||||
SELECT * FROM t3 WHERE a>=200 ORDER BY a;
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug= @old_debg;
|
||||
SET GLOBAL max_relay_log_size= @old_max;
|
||||
--source include/start_slave.inc
|
||||
|
||||
|
||||
|
||||
# Clean up.
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
|
||||
Reference in New Issue
Block a user