mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge branch '10.6' into 10.7
This commit is contained in:
31
sql/slave.cc
31
sql/slave.cc
@@ -4222,10 +4222,10 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
|
||||
the user might be surprised to see a claim that the slave is up to date
|
||||
long before those queued events are actually executed.
|
||||
*/
|
||||
if (!rli->mi->using_parallel() &&
|
||||
!(ev->is_artificial_event() || ev->is_relay_log_event() || (ev->when == 0)))
|
||||
if ((!rli->mi->using_parallel()) && event_can_update_last_master_timestamp(ev))
|
||||
{
|
||||
rli->last_master_timestamp= ev->when + (time_t) ev->exec_time;
|
||||
rli->sql_thread_caught_up= false;
|
||||
DBUG_ASSERT(rli->last_master_timestamp >= 0);
|
||||
}
|
||||
|
||||
@@ -4277,6 +4277,17 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
|
||||
|
||||
if (rli->mi->using_parallel())
|
||||
{
|
||||
if (unlikely((rli->last_master_timestamp == 0 ||
|
||||
rli->sql_thread_caught_up) &&
|
||||
event_can_update_last_master_timestamp(ev)))
|
||||
{
|
||||
if (rli->last_master_timestamp < ev->when)
|
||||
{
|
||||
rli->last_master_timestamp= ev->when;
|
||||
rli->sql_thread_caught_up= false;
|
||||
}
|
||||
}
|
||||
|
||||
int res= rli->parallel.do_event(serial_rgi, ev, event_size);
|
||||
/*
|
||||
In parallel replication, we need to update the relay log position
|
||||
@@ -4297,7 +4308,7 @@ 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)))
|
||||
if (event_can_update_last_master_timestamp(ev))
|
||||
{
|
||||
/*
|
||||
Ignore FD's timestamp as it does not reflect the slave execution
|
||||
@@ -4305,7 +4316,8 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
|
||||
data modification event execution last long all this time
|
||||
Seconds_Behind_Master is zero.
|
||||
*/
|
||||
if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT)
|
||||
if (ev->get_type_code() != FORMAT_DESCRIPTION_EVENT &&
|
||||
rli->last_master_timestamp < ev->when)
|
||||
rli->last_master_timestamp= ev->when + (time_t) ev->exec_time;
|
||||
|
||||
DBUG_ASSERT(rli->last_master_timestamp >= 0);
|
||||
@@ -7677,7 +7689,6 @@ static Log_event* next_event(rpl_group_info *rgi, ulonglong *event_size)
|
||||
|
||||
if (hot_log)
|
||||
mysql_mutex_unlock(log_lock);
|
||||
rli->sql_thread_caught_up= false;
|
||||
DBUG_RETURN(ev);
|
||||
}
|
||||
if (opt_reckless_slave) // For mysql-test
|
||||
@@ -7841,7 +7852,6 @@ static Log_event* next_event(rpl_group_info *rgi, ulonglong *event_size)
|
||||
rli->relay_log.wait_for_update_relay_log(rli->sql_driver_thd);
|
||||
// re-acquire data lock since we released it earlier
|
||||
mysql_mutex_lock(&rli->data_lock);
|
||||
rli->sql_thread_caught_up= false;
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
@@ -8032,12 +8042,19 @@ event(errno: %d cur_log->error: %d)",
|
||||
{
|
||||
sql_print_information("Error reading relay log event: %s",
|
||||
"slave SQL thread was killed");
|
||||
DBUG_RETURN(0);
|
||||
goto end;
|
||||
}
|
||||
|
||||
err:
|
||||
if (errmsg)
|
||||
sql_print_error("Error reading relay log event: %s", errmsg);
|
||||
|
||||
end:
|
||||
/*
|
||||
Set that we are not caught up so if there is a hang/problem on restart,
|
||||
Seconds_Behind_Master will still grow.
|
||||
*/
|
||||
rli->sql_thread_caught_up= false;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
#ifdef WITH_WSREP
|
||||
|
Reference in New Issue
Block a user