diff options
author | Sergei Golubchik <sergii@pisem.net> | 2012-03-09 08:06:59 +0100 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2012-03-09 08:06:59 +0100 |
commit | 4933d21e5d93840ddcf41bf25ed92fbe253ae92d (patch) | |
tree | a4d892b86aa46927978f82976fff61f1e5193383 /sql/sql_repl.cc | |
parent | 97ee59d27d3daca806fdb3577df5a0e0a45a0a30 (diff) | |
parent | 7009bf411a8cb9a6e035b761b5e6352b4f474303 (diff) | |
download | mariadb-git-4933d21e5d93840ddcf41bf25ed92fbe253ae92d.tar.gz |
merge with mysql-5.5.21
Diffstat (limited to 'sql/sql_repl.cc')
-rw-r--r-- | sql/sql_repl.cc | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 29ab8b1d05b..eb17ef0812c 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -625,8 +625,7 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos, String* const packet = &thd->packet; int error; const char *errmsg = "Unknown error", *tmp_msg; - const char *fmt= "%s; the last event was read from '%s' at %s, the last byte read was read from '%s' at %s."; - char llbuff1[22], llbuff2[22]; + char llbuff0[22], llbuff1[22], llbuff2[22]; char error_text[MAX_SLAVE_ERRMSG]; // to be send to slave via my_message() NET* net = &thd->net; mysql_mutex_t *log_lock; @@ -646,16 +645,15 @@ void mysql_binlog_send(THD* thd, char* log_ident, my_off_t pos, */ ulonglong heartbeat_period= get_heartbeat_period(thd); struct timespec heartbeat_buf; - struct event_coordinates coord_buf; struct timespec *heartbeat_ts= NULL; - struct event_coordinates *coord= NULL; + const LOG_POS_COORD start_coord= { log_ident, pos }, + *p_start_coord= &start_coord; + LOG_POS_COORD coord_buf= { log_file_name, BIN_LOG_HEADER_SIZE }, + *p_coord= &coord_buf; if (heartbeat_period != LL(0)) { heartbeat_ts= &heartbeat_buf; set_timespec_nsec(*heartbeat_ts, 0); - coord= &coord_buf; - coord->file_name= log_file_name; // initialization basing on what slave remembers - coord->pos= pos; } sql_print_information("Start binlog_dump to slave_server(%d), pos(%s, %lu)", thd->server_id, log_ident, (ulong)pos); @@ -776,6 +774,7 @@ impossible position"; mysql_bin_log, and it's already inited, and it will be destroyed only at shutdown). */ + p_coord->pos= pos; // the first hb matches the slave's last seen value log_lock= mysql_bin_log.get_log_lock(); log_cond= mysql_bin_log.get_log_cond(); if (pos > BIN_LOG_HEADER_SIZE) @@ -895,8 +894,7 @@ impossible position"; /* log's filename does not change while it's active */ - if (coord) - coord->pos= uint4korr(packet->ptr() + ev_offset + LOG_POS_OFFSET); + p_coord->pos= uint4korr(packet->ptr() + ev_offset + LOG_POS_OFFSET); event_type= (Log_event_type)((uchar)(*packet)[LOG_EVENT_OFFSET+ev_offset]); @@ -1026,10 +1024,8 @@ impossible position"; /* we read successfully, so we'll need to send it to the slave */ mysql_mutex_unlock(log_lock); read_packet = 1; - if (coord) - coord->pos= uint4korr(packet->ptr() + ev_offset + LOG_POS_OFFSET); - event_type= - (Log_event_type)((uchar)(*packet)[LOG_EVENT_OFFSET+ev_offset]); + p_coord->pos= uint4korr(packet->ptr() + ev_offset + LOG_POS_OFFSET); + event_type= (Log_event_type)((*packet)[LOG_EVENT_OFFSET+ev_offset]); break; case LOG_READ_EOF: @@ -1050,16 +1046,16 @@ impossible position"; signal_cnt= mysql_bin_log.signal_cnt; do { - if (coord) + if (heartbeat_period != 0) { - DBUG_ASSERT(heartbeat_ts && heartbeat_period != 0); + DBUG_ASSERT(heartbeat_ts); set_timespec_nsec(*heartbeat_ts, heartbeat_period); } thd->enter_cond(log_cond, log_lock, "Master has sent all binlog to slave; " "waiting for binlog to be updated"); ret= mysql_bin_log.wait_for_update_bin_log(thd, heartbeat_ts); - DBUG_ASSERT(ret == 0 || (heartbeat_period != 0 && coord != NULL)); + DBUG_ASSERT(ret == 0 || (heartbeat_period != 0)); if (ret == ETIMEDOUT || ret == ETIME) { #ifndef DBUG_OFF @@ -1077,7 +1073,7 @@ impossible position"; thd->exit_cond(old_msg); goto err; } - if (send_heartbeat_event(net, packet, coord, current_checksum_alg)) + if (send_heartbeat_event(net, packet, p_coord, current_checksum_alg)) { errmsg = "Failed on my_net_write()"; my_errno= ER_UNKNOWN_ERROR; @@ -1160,8 +1156,7 @@ impossible position"; goto err; } - if (coord) - coord->file_name= log_file_name; // reset to the next + p_coord->file_name= log_file_name; // reset to the next } } @@ -1186,9 +1181,12 @@ err: detailing the fatal error message with coordinates of the last position read. */ + const char *fmt= "%s; the start event position from '%s' at %s, the last event was read from '%s' at %s, the last byte read was read from '%s' at %s."; my_snprintf(error_text, sizeof(error_text), fmt, errmsg, - my_basename(coord->file_name), (llstr(coord->pos, llbuff1), llbuff1), - my_basename(log_file_name), (llstr(my_b_tell(&log), llbuff2), llbuff2)); + my_basename(p_start_coord->file_name), + (llstr(p_start_coord->pos, llbuff0), llbuff0), + my_basename(p_coord->file_name), (llstr(p_coord->pos, llbuff1), llbuff1), + my_basename(log_file_name), (llstr(my_b_tell(&log), llbuff2), llbuff2)); } else strcpy(error_text, errmsg); |