Loading sql/slave.cc +36 −8 Original line number Diff line number Diff line Loading @@ -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"); Loading Loading @@ -1148,7 +1148,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(); Loading @@ -1158,7 +1158,10 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) pthread_detach_this_thread(); if (init_slave_thread(thd) || init_master_info(&glob_mi)) { 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); Loading @@ -1185,7 +1188,10 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) RPL_LOG_NAME, glob_mi.pos); else { sql_print_error("Slave thread killed while connecting to master"); goto err; } while (!slave_killed(thd)) { Loading @@ -1194,7 +1200,11 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) { sql_print_error("Failed on request_dump()"); if(slave_killed(thd)) { sql_print_error("Slave thread killed while requesting master \ dump"); goto err; } thd->proc_info = "waiting to reconnect after a failed dump request"; if(mysql->net.vio) Loading @@ -1208,14 +1218,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; } Loading @@ -1226,7 +1243,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)) { sql_print_error("Slave thread killed while reading event"); goto err; } if (event_len == packet_error) { Loading @@ -1239,13 +1259,21 @@ try again, log '%s' at postion %ld", RPL_LOG_NAME, retried_once = 1; if(slave_killed(thd)) { 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)) { sql_print_error("Slave thread killed during or after a \ reconnect done to recover from failed read"); goto err; } break; } Loading sql/slave.h +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading @@ -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; Loading Loading
sql/slave.cc +36 −8 Original line number Diff line number Diff line Loading @@ -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"); Loading Loading @@ -1148,7 +1148,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(); Loading @@ -1158,7 +1158,10 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) pthread_detach_this_thread(); if (init_slave_thread(thd) || init_master_info(&glob_mi)) { 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); Loading @@ -1185,7 +1188,10 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) RPL_LOG_NAME, glob_mi.pos); else { sql_print_error("Slave thread killed while connecting to master"); goto err; } while (!slave_killed(thd)) { Loading @@ -1194,7 +1200,11 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) { sql_print_error("Failed on request_dump()"); if(slave_killed(thd)) { sql_print_error("Slave thread killed while requesting master \ dump"); goto err; } thd->proc_info = "waiting to reconnect after a failed dump request"; if(mysql->net.vio) Loading @@ -1208,14 +1218,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; } Loading @@ -1226,7 +1243,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)) { sql_print_error("Slave thread killed while reading event"); goto err; } if (event_len == packet_error) { Loading @@ -1239,13 +1259,21 @@ try again, log '%s' at postion %ld", RPL_LOG_NAME, retried_once = 1; if(slave_killed(thd)) { 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)) { sql_print_error("Slave thread killed during or after a \ reconnect done to recover from failed read"); goto err; } break; } Loading
sql/slave.h +4 −4 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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; Loading @@ -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; Loading