mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
MDEV-14528 Track master timestamp in case rolling back to serial replication
When replicated events are from Master unaware of MariaDB GTID their handling by the Parallel slave misses Seconds_Behind_Master updating. In the bug condition the Show-Slave-Status' field remains unchanged. Because in such case event execution is sequential the bug is fixed with deploying the same logics as in the explicit single-threaded mode with is to set Relay_log_event::last_master_timestamp member early at the end of event reading from the relay log.
This commit is contained in:
parent
7dfcb87107
commit
54b8856b87
3 changed files with 16 additions and 0 deletions
|
@ -9,7 +9,10 @@ connection slave;
|
|||
SET @old_parallel= @@GLOBAL.slave_parallel_threads;
|
||||
SET GLOBAL slave_parallel_threads=10;
|
||||
CHANGE MASTER TO master_host='127.0.0.1', master_port=SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
include/start_slave.inc
|
||||
include/wait_for_slave_param.inc [Seconds_Behind_Master]
|
||||
UNLOCK TABLES;
|
||||
connection master;
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
|
|
@ -27,7 +27,15 @@ SET @old_parallel= @@GLOBAL.slave_parallel_threads;
|
|||
SET GLOBAL slave_parallel_threads=10;
|
||||
--replace_result $SERVER_MYPORT_1 SERVER_MYPORT_1
|
||||
eval CHANGE MASTER TO master_host='127.0.0.1', master_port=$SERVER_MYPORT_1, master_user='root', master_log_file='master-bin.000001', master_log_pos=4;
|
||||
|
||||
# Block execution yet when the blocked query timestamp has been already accounted
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
--source include/start_slave.inc
|
||||
--let $slave_param = Seconds_Behind_Master
|
||||
--let $slave_param_value = 1
|
||||
--let $slave_param_comparison= >=
|
||||
--source include/wait_for_slave_param.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
--connection master
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
|
|
|
@ -3960,6 +3960,11 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
|
|||
This is the case for pre-10.0 events without GTID, and for handling
|
||||
slave_skip_counter.
|
||||
*/
|
||||
if (!(ev->is_artificial_event() || ev->is_relay_log_event() || (ev->when == 0)))
|
||||
{
|
||||
rli->last_master_timestamp= ev->when + (time_t) ev->exec_time;
|
||||
DBUG_ASSERT(rli->last_master_timestamp >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (typ == GTID_EVENT)
|
||||
|
|
Loading…
Reference in a new issue