diff options
-rw-r--r-- | BitKeeper/etc/logging_ok | 1 | ||||
-rw-r--r-- | sql/slave.cc | 50 | ||||
-rw-r--r-- | sql/slave.h | 8 |
3 files changed, 44 insertions, 15 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 42ac1083e4f..c1896d5a440 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -1,2 +1,3 @@ mwagner@evoq.mwagner.org heikki@donna.mysql.fi +sasha@mysql.sashanet.com diff --git a/sql/slave.cc b/sql/slave.cc index ebf757420a3..474ce55d802 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -588,7 +588,7 @@ int show_master_info(THD* thd) net_store_data(packet, (uint32) glob_mi.port); net_store_data(packet, (uint32) glob_mi.connect_retry); net_store_data(packet, glob_mi.log_file_name); - net_store_data(packet, (longlong) glob_mi.pos); + net_store_data(packet, (uint32) glob_mi.pos); pthread_mutex_unlock(&glob_mi.lock); pthread_mutex_lock(&LOCK_slave); net_store_data(packet, slave_running ? "Yes":"No"); @@ -1150,7 +1150,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) int error = 1; bool retried_once = 0; - ulonglong last_failed_pos = 0; + uint32 last_failed_pos = 0; // needs to call my_thread_init(), otherwise we get a coredump in DBUG_ stuff my_thread_init(); @@ -1160,7 +1160,10 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) pthread_detach_this_thread(); if (init_slave_thread(thd) || init_master_info(&glob_mi)) - goto err; + { + sql_print_error("Failed during slave thread initialization"); + goto err; + } thd->thread_stack = (char*)&thd; // remember where our stack is thd->temporary_tables = save_temporary_tables; // restore temp tables threads.append(thd); @@ -1175,7 +1178,7 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) goto err; } - thd->proc_info = "Connecting to master"; + thd->proc_info = "connecting to master"; #ifndef DBUG_OFF sql_print_error("Slave thread initialized"); #endif @@ -1187,18 +1190,25 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) RPL_LOG_NAME, glob_mi.pos); else - goto err; + { + sql_print_error("Slave thread killed while connecting to master"); + goto err; + } while (!slave_killed(thd)) { - thd->proc_info = "Requesting binlog dump"; + thd->proc_info = "requesting binlog dump"; if(request_dump(mysql, &glob_mi)) { sql_print_error("Failed on request_dump()"); if(slave_killed(thd)) goto err; + sql_print_error("Slave thread killed while requesting master \ +dump"); + goto err; + } - thd->proc_info = "Waiting to reconnect after a failed dump request"; + thd->proc_info = "waiting to reconnect after a failed dump request"; if(mysql->net.vio) vio_close(mysql->net.vio); // first time retry immediately, assuming that we can recover @@ -1210,14 +1220,21 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) retried_once = 1; if(slave_killed(thd)) + { + sql_print_error("Slave thread killed while retrying master \ +dump"); goto err; + } thd->proc_info = "Reconnecting after a failed dump request"; sql_print_error("Slave: failed dump request, reconnecting to \ try again, log '%s' at postion %ld", RPL_LOG_NAME, last_failed_pos = glob_mi.pos ); if(safe_reconnect(thd, mysql, &glob_mi) || slave_killed(thd)) + { + sql_print_error("Slave thread killed during or after reconnect"); goto err; + } continue; } @@ -1228,7 +1245,10 @@ try again, log '%s' at postion %ld", RPL_LOG_NAME, thd->proc_info = "Reading master update"; uint event_len = read_event(mysql, &glob_mi); if(slave_killed(thd)) - goto err; + { + sql_print_error("Slave thread killed while reading event"); + goto err; + } if (event_len == packet_error) { @@ -1241,13 +1261,21 @@ try again, log '%s' at postion %ld", RPL_LOG_NAME, retried_once = 1; if(slave_killed(thd)) - goto err; - thd->proc_info = "Reconnecting after a failed read"; + { + sql_print_error("Slave thread killed while waiting to \ +reconnect after a failed read"); + goto err; + } + thd->proc_info = "reconnecting after a failed read"; sql_print_error("Slave: Failed reading log event, \ reconnecting to retry, log '%s' position %ld", RPL_LOG_NAME, last_failed_pos = glob_mi.pos); if(safe_reconnect(thd, mysql, &glob_mi) || slave_killed(thd)) - goto err; + { + sql_print_error("Slave thread killed during or after a \ +reconnect done to recover from failed read"); + goto err; + } break; } diff --git a/sql/slave.h b/sql/slave.h index 11c01a9fa03..d47ec22410c 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -4,7 +4,7 @@ typedef struct st_master_info { char log_file_name[FN_REFLEN]; - ulonglong pos,pending; + uint32 pos,pending; File fd; // we keep the file open, so we need to remember the file pointer IO_CACHE file; // the variables below are needed because we can change masters on the fly @@ -29,11 +29,11 @@ typedef struct st_master_info pthread_mutex_destroy(&lock); pthread_cond_destroy(&cond); } - inline void inc_pending(ulonglong val) + inline void inc_pending(uint32 val) { pending += val; } - inline void inc_pos(ulonglong val) + inline void inc_pos(uint32 val) { pthread_mutex_lock(&lock); pos += val + pending; @@ -43,7 +43,7 @@ typedef struct st_master_info } // thread safe read of position - not needed if we are in the slave thread, // but required otherwise - inline void read_pos(ulonglong& var) + inline void read_pos(uint32& var) { pthread_mutex_lock(&lock); var = pos; |