From 6bc324ed215f245eb57c5197b41be7cc3cdaf382 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 23 Mar 2005 19:19:36 +0100 Subject: "After Monty's review" changes to the fix for BUG#8325 "Deadlock in replication thread stops replication": s/sleep/safe_sleep (thread safe); sleep 0/1/2/3/4/5/5/5 (get slave less late); no message on error log (deadlock is too common sometimes), a global counter instead (SHOW STATUS LIKE 'slave_retried_transactions'). Plus a fix for libmysql/Makefile.shared libmysql/Makefile.shared: When we "make clean" in libmysql/ we remove the symlinks there, so we need to mark that they have to be recreated later: this is done by removing ../linked_libmysql_sources. If we don't do this, 'make' will fail after 'cd libmysql;make clean'. This Makefile.shared is used by libmysql_r too. No reason to remove linked_client_sources as we don't remove the links in client/. mysql-test/r/rpl_deadlock.result: result fix mysql-test/t/rpl_deadlock.test: small test addition sql/mysqld.cc: if active_mi could not be alloced, die. New SHOW STATUS LIKE "slave_retried_transactions". sql/slave.cc: If slave retries automatically a transaction, no message on error log (too common situation); sleep 0 secs at first retry, then 1, 2, 3, 4, 5, 5, 5... Sleeping 0 is to get the least possible late, as deadlocks are usually resolved at first try. New global counter rli->retried_trans (for SHOW STATUS: total number of times the slave had to retry any transaction). safe_sleep() is thread-safe, sleep() was not. I change the rli->trans_retries counter to go from 0 to max instead of the other way (better for new sleep()). sql/slave.h: new global counter rli->retried_trans sql/sql_show.cc: SHOW STATUS LIKE "slave_retried_transactions"; needs replication mutexes. Can't be a simple SHOW_LONG, because active_mi is unset (not alloced yet) when the static global status_vars is created (active_mi is set in init_slave()). sql/structs.h: new SHOW_SLAVE_RETRIED_TRANS BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted --- sql/slave.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'sql/slave.h') diff --git a/sql/slave.h b/sql/slave.h index fb7560ec738..5a85e26d9ad 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -295,7 +295,14 @@ typedef struct st_relay_log_info UNTIL_LOG_NAMES_CMP_EQUAL= 0, UNTIL_LOG_NAMES_CMP_GREATER= 1 } until_log_names_cmp_result; - ulong trans_retries; + /* + trans_retries varies between 0 to slave_transaction_retries and counts how + many times the slave has retried the present transaction; gets reset to 0 + when the transaction finally succeeds. retried_trans is a cumulative + counter: how many times the slave has retried a transaction (any) since + slave started. + */ + ulong trans_retries, retried_trans; st_relay_log_info(); ~st_relay_log_info(); -- cgit v1.2.1