diff options
author | Brandon Nesterenko <brandon.nesterenko@mariadb.com> | 2022-11-03 14:56:50 -0600 |
---|---|---|
committer | Brandon Nesterenko <brandon.nesterenko@mariadb.com> | 2023-01-24 08:11:35 -0700 |
commit | d69e835787f9ce9848cb6c2a5343887dd0eec2ce (patch) | |
tree | f24fc11faf81358e76cf85f9611829a41a459309 /sql/rpl_parallel.cc | |
parent | 2ed598eae8ebe737cdfa2aa2e7e6e0f3ad8d6ef7 (diff) | |
download | mariadb-git-d69e835787f9ce9848cb6c2a5343887dd0eec2ce.tar.gz |
MDEV-29639: Seconds_Behind_Master is incorrect for Delayed, Parallel Replicas
Problem
========
On a parallel, delayed replica, Seconds_Behind_Master will not be
calculated until after MASTER_DELAY seconds have passed and the
event has finished executing, resulting in potentially very large
values of Seconds_Behind_Master (which could be much larger than the
MASTER_DELAY parameter) for the entire duration the event is
delayed. This contradicts the documented MASTER_DELAY behavior,
which specifies how many seconds to withhold replicated events from
execution.
Solution
========
After a parallel replica idles, the first event after idling should
immediately update last_master_timestamp with the time that it began
execution on the primary.
Reviewed By
===========
Andrei Elkin <andrei.elkin@mariadb.com>
Diffstat (limited to 'sql/rpl_parallel.cc')
-rw-r--r-- | sql/rpl_parallel.cc | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc index 3eb25219ed3..dbe77c54230 100644 --- a/sql/rpl_parallel.cc +++ b/sql/rpl_parallel.cc @@ -45,8 +45,7 @@ rpt_handle_event(rpl_parallel_thread::queued_event *qev, rgi->event_relay_log_pos= qev->event_relay_log_pos; rgi->future_event_relay_log_pos= qev->future_event_relay_log_pos; strcpy(rgi->future_event_master_log_name, qev->future_event_master_log_name); - if (!(ev->is_artificial_event() || ev->is_relay_log_event() || - (ev->when == 0))) + if (event_can_update_last_master_timestamp(ev)) rgi->last_master_timestamp= ev->when + (time_t)ev->exec_time; err= apply_event_and_update_pos_for_parallel(ev, thd, rgi); |