diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 7b5e75b4..f88179bf 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1381,6 +1381,7 @@ ulong slow_launch_time; std::atomic atomic_replica_open_temp_tables{0}; ulong open_files_limit, max_binlog_size, max_relay_log_size; ulong slave_trans_retries; +ulong replica_lock_wait_timeout; uint replica_net_timeout; ulong replica_exec_mode_options; ulonglong replica_type_conversions_options; diff --git a/sql/mysqld.h b/sql/mysqld.h index 1a0d22d3..435da4d0 100644 --- a/sql/mysqld.h +++ b/sql/mysqld.h @@ -309,6 +309,7 @@ extern ulong max_digest_length; extern ulong max_connect_errors, connect_timeout; extern bool opt_replica_allow_batching; extern ulong slave_trans_retries; +extern ulong replica_lock_wait_timeout; extern uint replica_net_timeout; extern ulong opt_mts_replica_parallel_workers; extern ulonglong opt_mts_pending_jobs_size_max; diff --git a/sql/rpl_replica.cc b/sql/rpl_replica.cc index 0cbd0a2b..8119536d 100644 --- a/sql/rpl_replica.cc +++ b/sql/rpl_replica.cc @@ -4132,8 +4132,12 @@ int init_replica_thread(THD *thd, SLAVE_THD_TYPE thd_type) { THD_STAGE_INFO(thd, stage_waiting_for_source_update); } thd->set_time(); - /* Do not use user-supplied timeout value for system threads. */ - thd->variables.lock_wait_timeout = LONG_TIMEOUT; + /* + System threads do not inherit the user-supplied lock_wait_timeout. + Replication applier threads use replica_lock_wait_timeout, which + defaults to LONG_TIMEOUT (1 year) to preserve historical behavior. + */ + thd->variables.lock_wait_timeout = replica_lock_wait_timeout; return 0; } diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 8ef0199c..ca8e3439 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -6312,6 +6312,13 @@ static Sys_var_ulong Sys_replica_transaction_retries( static Sys_var_deprecated_alias Sys_slave_transaction_retries( "slave_transaction_retries", Sys_replica_transaction_retries); +static Sys_var_ulong Sys_replica_lock_wait_timeout( + "replica_lock_wait_timeout", + "Timeout in seconds for replication applier threads (SQL_thread)" + " to wait for a metadata lock before returning an error. ", + GLOBAL_VAR(replica_lock_wait_timeout), CMD_LINE(REQUIRED_ARG), + VALID_RANGE(1, LONG_TIMEOUT), DEFAULT(LONG_TIMEOUT), BLOCK_SIZE(1)); + static Sys_var_ulong Sys_replica_parallel_workers( "replica_parallel_workers", "Number of worker threads applying changes in parallel ",