mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-8294: Inconsistent behavior of slave parallel threads at runtime
There were some cases where the slave SQL thread could stop without the pool of parallel replication worker threads being correctly de-activated.
This commit is contained in:
25
sql/slave.cc
25
sql/slave.cc
@@ -652,11 +652,10 @@ int terminate_slave_threads(Master_info* mi,int thread_mask,bool skip_lock)
|
||||
DBUG_RETURN(ER_ERROR_DURING_FLUSH_LOGS);
|
||||
|
||||
mysql_mutex_unlock(log_lock);
|
||||
|
||||
if (opt_slave_parallel_threads > 0 &&
|
||||
!master_info_index->any_slave_sql_running())
|
||||
rpl_parallel_inactivate_pool(&global_rpl_thread_pool);
|
||||
}
|
||||
if (opt_slave_parallel_threads > 0 &&
|
||||
!master_info_index->any_slave_sql_running())
|
||||
rpl_parallel_inactivate_pool(&global_rpl_thread_pool);
|
||||
if (thread_mask & (SLAVE_IO|SLAVE_FORCE_ALL))
|
||||
{
|
||||
DBUG_PRINT("info",("Terminating IO thread"));
|
||||
@@ -4820,10 +4819,8 @@ err_during_init:
|
||||
THD_CHECK_SENTRY(thd);
|
||||
rli->sql_driver_thd= 0;
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
THD_CHECK_SENTRY(thd);
|
||||
thd->rgi_fake= thd->rgi_slave= NULL;
|
||||
delete serial_rgi;
|
||||
delete thd;
|
||||
mysql_mutex_unlock(&LOCK_thread_count);
|
||||
/*
|
||||
Note: the order of the broadcast and unlock calls below (first broadcast, then unlock)
|
||||
@@ -4834,6 +4831,22 @@ err_during_init:
|
||||
DBUG_EXECUTE_IF("simulate_slave_delay_at_terminate_bug38694", sleep(5););
|
||||
mysql_mutex_unlock(&rli->run_lock); // tell the world we are done
|
||||
|
||||
/*
|
||||
Deactivate the parallel replication thread pool, if there are now no more
|
||||
SQL threads running. Do this here, when we have released all locks, but
|
||||
while our THD (and current_thd) is still valid.
|
||||
*/
|
||||
mysql_mutex_lock(&LOCK_active_mi);
|
||||
if (opt_slave_parallel_threads > 0 &&
|
||||
!master_info_index->any_slave_sql_running())
|
||||
rpl_parallel_inactivate_pool(&global_rpl_thread_pool);
|
||||
mysql_mutex_unlock(&LOCK_active_mi);
|
||||
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
THD_CHECK_SENTRY(thd);
|
||||
delete thd;
|
||||
mysql_mutex_unlock(&LOCK_thread_count);
|
||||
|
||||
DBUG_LEAVE; // Must match DBUG_ENTER()
|
||||
my_thread_end();
|
||||
#ifdef HAVE_OPENSSL
|
||||
|
Reference in New Issue
Block a user