MDEV-7126 replication slave - deadlock in terminate_slave_thread with stop...
MDEV-7126 replication slave - deadlock in terminate_slave_thread with stop slave and show variables of replication filters and show global status Three-way deadlock: T1: SHOW GLOBAL STATUS -> acquire LOCK_status T2: STOP SLAVE -> acquire LOCK_active_mi -> terminate_slave_thread() -> -> cond_timedwait for handle_slave_sql to stop T3: sql slave thread (same applies to io thread) -> handle_slave_sql(), when exiting -> -> THD::add_status_to_global() -> -> -> wait for LOCK_status... T1: SHOW GLOBAL STATUS -> for "Slave_heartbeat_period" status variable -> -> show_heartbeat_period() -> -> -> wait for LOCK_active_mi cherry-pick from 5.6: commit fc8b395898f40387b3468122bd0dae31e29a6fde Author: Venkatesh Duggirala <venkatesh.duggirala@oracle.com> Date: Wed Jun 12 21:41:05 2013 +0530 BUG#16904035-SHOW STATUS - EXCESSIVE LOCKING ON LOCK_ACTIVE_MI AND ACTIVE_MI->RLI->DATA_LOCK Problem: Excessive locking on lock_active_mi and rli->data_lock while executing any `show status like 'X'` command. Analysis: SHOW_FUNCs for Slave_running, Slave_retried_transactions, Slave_heartbeat_period, Slave_received_heartbeats, Slave_last_heartbeat are acquiring lock_active_mi and rli->data_lock to show their variable value. It is ok to show stale data while showing the status variables i.e., even if they miss one update, it will not cause any great trouble. Fix: Remove the locks from the above mentioned SHOW_FUNC functions. Add a test case
Showing
Please register or sign in to comment