Loading sql/log_event.cc +13 −13 Original line number Diff line number Diff line Loading @@ -2517,19 +2517,19 @@ int Format_description_log_event::exec_event(struct st_relay_log_info* rli) if (server_id == (uint32) ::server_id) { /* Do not modify rli->group_master_log_pos, as this event did not exist on the master. That is, just update the *relay log* coordinates; this is done by passing log_pos=0 to inc_group_relay_log_pos, like we do in Stop_log_event::exec_event(). If in a transaction, don't touch group_* coordinates. We only increase the relay log position if we are skipping events and do not touch any group_* variables, nor flush the relay log info. If there is a crash, we will have to re-skip the events again, but that is a minor issue. If we do not skip stepping the group log position (and the server id was changed when restarting the server), it might well be that we start executing at a position that is invalid, e.g., at a Rows_log_event or a Query_log_event preceeded by a Intvar_log_event instead of starting at a Table_map_log_event or the Intvar_log_event respectively. */ if (thd->options & OPTION_BEGIN) rli->inc_event_relay_log_pos(); else { rli->inc_group_relay_log_pos(0); flush_relay_log_info(rli); } DBUG_RETURN(0); } Loading sql/slave.cc +16 −11 Original line number Diff line number Diff line Loading @@ -3101,17 +3101,22 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) type_code != START_EVENT_V3 && type_code!= FORMAT_DESCRIPTION_EVENT)) { DBUG_PRINT("info", ("event skipped")); if (thd->options & OPTION_BEGIN) /* We only skip the event here and do not increase the group log position. In the event that we have to restart, this means that we might have to skip the event again, but that is a minor issue. If we were to increase the group log position when skipping an event, it might be that we are restarting at the wrong position and have events before that we should have executed, so not increasing the group log position is a sure bet in this case. In this way, we just step the group log position when we *know* that we are at the end of a group. */ rli->inc_event_relay_log_pos(); else { rli->inc_group_relay_log_pos((type_code == ROTATE_EVENT || type_code == STOP_EVENT || type_code == FORMAT_DESCRIPTION_EVENT) ? LL(0) : ev->log_pos, 1/* skip lock*/); flush_relay_log_info(rli); } /* Protect against common user error of setting the counter to 1 Loading Loading
sql/log_event.cc +13 −13 Original line number Diff line number Diff line Loading @@ -2517,19 +2517,19 @@ int Format_description_log_event::exec_event(struct st_relay_log_info* rli) if (server_id == (uint32) ::server_id) { /* Do not modify rli->group_master_log_pos, as this event did not exist on the master. That is, just update the *relay log* coordinates; this is done by passing log_pos=0 to inc_group_relay_log_pos, like we do in Stop_log_event::exec_event(). If in a transaction, don't touch group_* coordinates. We only increase the relay log position if we are skipping events and do not touch any group_* variables, nor flush the relay log info. If there is a crash, we will have to re-skip the events again, but that is a minor issue. If we do not skip stepping the group log position (and the server id was changed when restarting the server), it might well be that we start executing at a position that is invalid, e.g., at a Rows_log_event or a Query_log_event preceeded by a Intvar_log_event instead of starting at a Table_map_log_event or the Intvar_log_event respectively. */ if (thd->options & OPTION_BEGIN) rli->inc_event_relay_log_pos(); else { rli->inc_group_relay_log_pos(0); flush_relay_log_info(rli); } DBUG_RETURN(0); } Loading
sql/slave.cc +16 −11 Original line number Diff line number Diff line Loading @@ -3101,17 +3101,22 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli) type_code != START_EVENT_V3 && type_code!= FORMAT_DESCRIPTION_EVENT)) { DBUG_PRINT("info", ("event skipped")); if (thd->options & OPTION_BEGIN) /* We only skip the event here and do not increase the group log position. In the event that we have to restart, this means that we might have to skip the event again, but that is a minor issue. If we were to increase the group log position when skipping an event, it might be that we are restarting at the wrong position and have events before that we should have executed, so not increasing the group log position is a sure bet in this case. In this way, we just step the group log position when we *know* that we are at the end of a group. */ rli->inc_event_relay_log_pos(); else { rli->inc_group_relay_log_pos((type_code == ROTATE_EVENT || type_code == STOP_EVENT || type_code == FORMAT_DESCRIPTION_EVENT) ? LL(0) : ev->log_pos, 1/* skip lock*/); flush_relay_log_info(rli); } /* Protect against common user error of setting the counter to 1 Loading