diff options
author | gbichot@quadita2.mysql.com <> | 2005-03-24 14:32:40 +0100 |
---|---|---|
committer | gbichot@quadita2.mysql.com <> | 2005-03-24 14:32:40 +0100 |
commit | 5acca04c7cc6e6a275cf97b11abbd0664ba3df58 (patch) | |
tree | 1c70ef9270a90b0bd16be031467493ef431cad61 /sql/slave.cc | |
parent | c9d997b98c44efb98199f49810dbdc2ef5f8beb4 (diff) | |
parent | bd74a139dc37d764d2fd3cbaeb79ff5371a35875 (diff) | |
download | mariadb-git-5acca04c7cc6e6a275cf97b11abbd0664ba3df58.tar.gz |
merge from 4.1
Diffstat (limited to 'sql/slave.cc')
-rw-r--r-- | sql/slave.cc | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/sql/slave.cc b/sql/slave.cc index c92350f4a2f..ebf87660a0e 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -27,6 +27,7 @@ #include <my_dir.h> #include <sql_common.h> +#define MAX_SLAVE_RETRY_PAUSE 5 bool use_slave_mask = 0; MY_BITMAP slave_error_mask; @@ -2528,7 +2529,7 @@ st_relay_log_info::st_relay_log_info() ignore_log_space_limit(0), last_master_timestamp(0), slave_skip_counter(0), abort_pos_wait(0), slave_run_id(0), sql_thd(0), last_slave_errno(0), inited(0), abort_slave(0), slave_running(0), until_condition(UNTIL_NONE), - until_log_pos(0) + until_log_pos(0), retried_trans(0) { group_relay_log_name[0]= event_relay_log_name[0]= group_master_log_name[0]= 0; @@ -3261,9 +3262,8 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) init_master_info()). b) init_relay_log_pos(), because the BEGIN may be an older relay log. */ - if (rli->trans_retries--) + if (rli->trans_retries < slave_trans_retries) { - sql_print_information("Slave SQL thread retries transaction"); if (init_master_info(rli->mi, 0, 0, 0, SLAVE_SQL)) sql_print_error("Failed to initialize the master info structure"); else if (init_relay_log_pos(rli, @@ -3275,8 +3275,16 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) else { exec_res= 0; - sleep(2); // chance for concurrent connection to get more locks - } + /* chance for concurrent connection to get more locks */ + safe_sleep(thd, min(rli->trans_retries, MAX_SLAVE_RETRY_PAUSE), + (CHECK_KILLED_FUNC)sql_slave_killed, (void*)rli); + pthread_mutex_lock(&rli->data_lock); // because of SHOW STATUS + rli->trans_retries++; + rli->retried_trans++; + pthread_mutex_unlock(&rli->data_lock); + DBUG_PRINT("info", ("Slave retries transaction " + "rli->trans_retries: %lu", rli->trans_retries)); + } } else sql_print_error("Slave SQL thread retried transaction %lu time(s) " @@ -3285,8 +3293,8 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) slave_trans_retries); } if (!((thd->options & OPTION_BEGIN) && opt_using_transactions)) - rli->trans_retries= slave_trans_retries; // restart from fresh - } + rli->trans_retries= 0; // restart from fresh + } return exec_res; } else @@ -3701,7 +3709,7 @@ slave_begin: pthread_mutex_lock(&rli->log_space_lock); rli->ignore_log_space_limit= 0; pthread_mutex_unlock(&rli->log_space_lock); - rli->trans_retries= slave_trans_retries; // start from "no error" + rli->trans_retries= 0; // start from "no error" if (init_relay_log_pos(rli, rli->group_relay_log_name, |