mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix for BUG#3017
"wrong Relay_Log_Pos if Rotate is in the middle of a transaction in relay log" increment 'pending' instead of 'relay_log_pos'. mysql-test/r/rpl_trunc_binlog.result: result update sql/log_event.cc: - corrected error message - in Rotate_log_event::exec_event(), if we're in a transaction (which can happen if the I/O slave thread reconnected while reading a transaction), don't increment relay_log_pos but pending instead. Otherwise, relay_log_pos becomes garbage (and so if slave stops at that moment, it will never restart).
This commit is contained in:
@ -10,4 +10,4 @@ reset slave;
|
|||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.002 4 slave-relay-bin.002 161 master-bin.001 Yes No 0 Rolling back unfinished transaction (no COMMIT or ROLLBACK) from relay log. Probably cause is that the master died while writing the transaction to it's binary log. 0 79 #
|
127.0.0.1 root MASTER_PORT 1 master-bin.002 4 slave-relay-bin.002 120 master-bin.001 Yes No 0 Rolling back unfinished transaction (no COMMIT or ROLLBACK) from relay log. A probable cause is that the master died while writing the transaction to its binary log. 0 79 #
|
||||||
|
@ -2121,7 +2121,7 @@ int Start_log_event::exec_event(struct st_relay_log_info* rli)
|
|||||||
slave_print_error(rli, 0,
|
slave_print_error(rli, 0,
|
||||||
"\
|
"\
|
||||||
Rolling back unfinished transaction (no COMMIT or ROLLBACK) from relay log. \
|
Rolling back unfinished transaction (no COMMIT or ROLLBACK) from relay log. \
|
||||||
Probably cause is that the master died while writing the transaction to it's \
|
A probable cause is that the master died while writing the transaction to its \
|
||||||
binary log.");
|
binary log.");
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@ -2221,13 +2221,15 @@ int Rotate_log_event::exec_event(struct st_relay_log_info* rli)
|
|||||||
In that case, we don't want to touch the coordinates which correspond to the
|
In that case, we don't want to touch the coordinates which correspond to the
|
||||||
beginning of the transaction.
|
beginning of the transaction.
|
||||||
*/
|
*/
|
||||||
if (!rli->inside_transaction)
|
if (rli->inside_transaction)
|
||||||
|
rli->inc_pending(get_event_len());
|
||||||
|
else
|
||||||
{
|
{
|
||||||
memcpy(rli->master_log_name, new_log_ident, ident_len+1);
|
memcpy(rli->master_log_name, new_log_ident, ident_len+1);
|
||||||
rli->master_log_pos= pos;
|
rli->master_log_pos= pos;
|
||||||
|
rli->relay_log_pos += get_event_len();
|
||||||
DBUG_PRINT("info", ("master_log_pos: %lu", (ulong) rli->master_log_pos));
|
DBUG_PRINT("info", ("master_log_pos: %lu", (ulong) rli->master_log_pos));
|
||||||
}
|
}
|
||||||
rli->relay_log_pos += get_event_len();
|
|
||||||
pthread_mutex_unlock(&rli->data_lock);
|
pthread_mutex_unlock(&rli->data_lock);
|
||||||
pthread_cond_broadcast(&rli->data_cond);
|
pthread_cond_broadcast(&rli->data_cond);
|
||||||
flush_relay_log_info(rli);
|
flush_relay_log_info(rli);
|
||||||
|
Reference in New Issue
Block a user