mirror of
https://github.com/MariaDB/server.git
synced 2025-07-16 00:42:55 +03:00
MDEV-5262: Missing retry after temp error in parallel replication
Implement that if first retry fails, we can do another attempt. Add testcases to test multi-retry that succeeds in second attempt, and multi-retry that eventually fails due to exceeding slave_trans_retries.
This commit is contained in:
committed by
Kristian Nielsen
parent
b0b60f2498
commit
d60915692c
@ -47,27 +47,22 @@ CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
|
||||
END
|
||||
||
|
||||
--delimiter ;
|
||||
SET sql_log_bin=1;
|
||||
--source include/stop_slave.inc
|
||||
|
||||
--connection server_1
|
||||
SET @old_format= @@SESSION.binlog_format;
|
||||
SET binlog_format='statement';
|
||||
SET gtid_seq_no = 100;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (2,1);
|
||||
UPDATE t1 SET b=b+1 WHERE a=1;
|
||||
#INSERT INTO t1 VALUES (3,foo(1,
|
||||
# "ha_write_row_end SIGNAL q1_ready WAIT_FOR q1_cont",
|
||||
# ""));
|
||||
INSERT INTO t1 VALUES (3,1);
|
||||
COMMIT;
|
||||
SET binlog_format=@old_format;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
--save_master_pos
|
||||
|
||||
--connection server_2
|
||||
SET @old_dbug= @@GLOBAL.debug_dbug;
|
||||
SET GLOBAL debug_dbug="+d,rpl_parallel_simulate_temp_err_gtid_0_1_100";
|
||||
SET GLOBAL debug_dbug="+d,rpl_parallel_simulate_temp_err_gtid_0_x_100";
|
||||
let $old_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
|
||||
--source include/start_slave.inc
|
||||
--sync_with_master
|
||||
@ -79,6 +74,82 @@ eval SELECT $new_retry - $old_retry AS retries;
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
|
||||
--echo *** Test that double retry works when the first retry also fails with temp error ***
|
||||
--source include/stop_slave.inc
|
||||
|
||||
--connection server_1
|
||||
SET gtid_seq_no = 100;
|
||||
SET @old_server_id = @@server_id;
|
||||
SET server_id = 10;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (4,1);
|
||||
UPDATE t1 SET b=b+1 WHERE a=1;
|
||||
INSERT INTO t1 VALUES (5,1);
|
||||
INSERT INTO t1 VALUES (6,1);
|
||||
COMMIT;
|
||||
SET server_id = @old_server_id;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
--save_master_pos
|
||||
|
||||
--connection server_2
|
||||
SET @old_dbug= @@GLOBAL.debug_dbug;
|
||||
SET GLOBAL debug_dbug="+d,rpl_parallel_simulate_temp_err_gtid_0_x_100,rpl_parallel_simulate_double_temp_err_gtid_0_x_100";
|
||||
let $old_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
|
||||
--source include/start_slave.inc
|
||||
--sync_with_master
|
||||
SET GLOBAL debug_dbug=@old_dbug;
|
||||
let $new_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
|
||||
--disable_query_log
|
||||
eval SELECT $new_retry - $old_retry AS retries;
|
||||
--enable_query_log
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
|
||||
--echo *** Test too many retries, eventually causing failure. ***
|
||||
--source include/stop_slave.inc
|
||||
|
||||
--connection server_1
|
||||
SET gtid_seq_no = 100;
|
||||
SET @old_server_id = @@server_id;
|
||||
SET server_id = 11;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (7,1);
|
||||
UPDATE t1 SET b=b+1 WHERE a=1;
|
||||
INSERT INTO t1 VALUES (8,1);
|
||||
INSERT INTO t1 VALUES (9,1);
|
||||
COMMIT;
|
||||
SET server_id = @old_server_id;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
--save_master_pos
|
||||
|
||||
--connection server_2
|
||||
SET sql_log_bin=0;
|
||||
CALL mtr.add_suppression("Slave worker thread retried transaction 10 time\\(s\\) in vain, giving up");
|
||||
CALL mtr.add_suppression("Slave: Deadlock found when trying to get lock; try restarting transaction");
|
||||
SET sql_log_bin=1;
|
||||
|
||||
SET @old_dbug= @@GLOBAL.debug_dbug;
|
||||
SET GLOBAL debug_dbug="+d,rpl_parallel_simulate_temp_err_gtid_0_x_100,rpl_parallel_simulate_infinite_temp_err_gtid_0_x_100";
|
||||
let $old_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1213
|
||||
--let $slave_timeout= 10
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
SET GLOBAL debug_dbug=@old_dbug;
|
||||
let $new_retry= query_get_value(SHOW STATUS LIKE 'Slave_retried_transactions', Value, 1);
|
||||
--disable_query_log
|
||||
eval SELECT $new_retry - $old_retry AS retries;
|
||||
--enable_query_log
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
STOP SLAVE IO_THREAD;
|
||||
--source include/start_slave.inc
|
||||
--sync_with_master
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
|
||||
|
Reference in New Issue
Block a user