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/sql_show.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'sql/sql_show.cc') diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 76ea72ef41c..f979b3ca771 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1887,6 +1887,19 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables, pthread_mutex_unlock(&LOCK_active_mi); break; } + case SHOW_SLAVE_RETRIED_TRANS: + { + /* + TODO: in 5.1 with multimaster, have one such counter per line in SHOW + SLAVE STATUS, and have the sum over all lines here. + */ + pthread_mutex_lock(&LOCK_active_mi); + pthread_mutex_lock(&active_mi->rli.data_lock); + end= int10_to_str(active_mi->rli.retried_trans, buff, 10); + pthread_mutex_unlock(&active_mi->rli.data_lock); + pthread_mutex_unlock(&LOCK_active_mi); + break; + } #endif /* HAVE_REPLICATION */ case SHOW_OPENTABLES: end= int10_to_str((long) cached_tables(), buff, 10); -- cgit v1.2.1