mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-5262: Missing retry after temp error in parallel replication
Handle retry of event groups that span multiple relay log files. - If retry reaches the end of one relay log file, move on to the next. - Handle refcounting of relay log files, and avoid purging relay log files until all event groups have completed that might have needed them for transaction retry.
This commit is contained in:
committed by
Kristian Nielsen
parent
d60915692c
commit
787c470cef
@ -149,6 +149,64 @@ STOP SLAVE IO_THREAD;
|
||||
--sync_with_master
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
--echo *** Test retry of event group that spans multiple relay log files. ***
|
||||
|
||||
--connection server_1
|
||||
CREATE TABLE t2 (a int PRIMARY KEY, b BLOB) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,"Hulubullu");
|
||||
--save_master_pos
|
||||
|
||||
--connection server_2
|
||||
--sync_with_master
|
||||
--source include/stop_slave.inc
|
||||
SET @old_max= @@GLOBAL.max_relay_log_size;
|
||||
SET GLOBAL max_relay_log_size=4096;
|
||||
|
||||
--connection server_1
|
||||
--let $big= `SELECT REPEAT("*", 5000)`
|
||||
SET gtid_seq_no = 100;
|
||||
SET @old_server_id = @@server_id;
|
||||
SET server_id = 12;
|
||||
BEGIN;
|
||||
--disable_query_log
|
||||
eval INSERT INTO t2 VALUES (2, CONCAT("Hello ", "$big"));
|
||||
eval INSERT INTO t2 VALUES (3, CONCAT("Long data: ", "$big"));
|
||||
--enable_query_log
|
||||
INSERT INTO t1 VALUES (10, 4);
|
||||
COMMIT;
|
||||
SET server_id = @old_server_id;
|
||||
SELECT * FROM t1 WHERE a >= 10 ORDER BY a;
|
||||
SELECT a, LENGTH(b) FROM t2 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";
|
||||
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 WHERE a >= 10 ORDER BY a;
|
||||
SELECT a, LENGTH(b) FROM t2 ORDER BY a;
|
||||
|
||||
--connection server_1
|
||||
INSERT INTO t1 VALUES (11,11);
|
||||
--disable_query_log
|
||||
eval INSERT INTO t2 VALUES (4, "$big");
|
||||
--enable_query_log
|
||||
--save_master_pos
|
||||
|
||||
--connection server_2
|
||||
--sync_with_master
|
||||
SELECT * FROM t1 WHERE a >= 10 ORDER BY a;
|
||||
SELECT a, LENGTH(b) FROM t2 ORDER BY a;
|
||||
SET GLOBAL max_relay_log_size=@old_max;
|
||||
|
||||
|
||||
--connection server_2
|
||||
--source include/stop_slave.inc
|
||||
@ -156,7 +214,7 @@ SET GLOBAL slave_parallel_threads=@old_parallel_threads;
|
||||
--source include/start_slave.inc
|
||||
|
||||
--connection server_1
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t1, t2;
|
||||
DROP function foo;
|
||||
|
||||
--source include/rpl_end.inc
|
||||
|
Reference in New Issue
Block a user