mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
WL#3464: Add replication event to denote gap in replication
Adding an event that can be used to denote that an incident occured on the master. The event can be used to denote a gap in the replication stream, but can also be used to denote other incidents. In addition, the injector interface is extended with functions to generate an incident event. The function will also rotate the binary log after generating an incident event to get a fresh binary log. client/Makefile.am: Adding file rpl_constants.h with constants for replication. mysql-test/extra/binlog_tests/binlog.test: Binlog position change mysql-test/extra/binlog_tests/binlog_insert_delayed.test: Binlog position change mysql-test/extra/binlog_tests/ctype_cp932_binlog.test: Binlog position change mysql-test/extra/binlog_tests/ctype_ucs_binlog.test: Binlog position change mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test: Binlog position change mysql-test/extra/rpl_tests/rpl_deadlock.test: Binlog position change mysql-test/extra/rpl_tests/rpl_log.test: Binlog position change mysql-test/extra/rpl_tests/rpl_multi_query.test: Binlog position change mysql-test/extra/rpl_tests/rpl_row_charset.test: Binlog position change mysql-test/extra/rpl_tests/rpl_row_sp002.test: Binlog position change mysql-test/extra/rpl_tests/rpl_row_sp003.test: Binlog position change mysql-test/extra/rpl_tests/rpl_stm_charset.test: Binlog position change mysql-test/include/show_binlog_events.inc: Binlog position change mysql-test/r/binlog_row_binlog.result: Result change mysql-test/r/binlog_row_ctype_ucs.result: Result change mysql-test/r/binlog_row_insert_select.result: Result change mysql-test/r/binlog_row_mix_innodb_myisam.result: Result change mysql-test/r/binlog_stm_binlog.result: Result change mysql-test/r/binlog_stm_ctype_ucs.result: Result change mysql-test/r/binlog_stm_insert_select.result: Result change mysql-test/r/binlog_stm_mix_innodb_myisam.result: Result change mysql-test/r/ctype_cp932_binlog_row.result: Result change mysql-test/r/ctype_cp932_binlog_stm.result: Result change mysql-test/r/flush_block_commit_notembedded.result: Result change mysql-test/r/rpl_000015.result: Result change mysql-test/r/rpl_change_master.result: Result change mysql-test/r/rpl_deadlock_innodb.result: Result change mysql-test/r/rpl_flushlog_loop.result: Result change mysql-test/r/rpl_loaddata.result: Result change mysql-test/r/rpl_loaddata_s.result: Result change mysql-test/r/rpl_log_pos.result: Result change mysql-test/r/rpl_ndb_charset.result: Result change mysql-test/r/rpl_ndb_log.result: Result change mysql-test/r/rpl_ndb_multi.result: Result change mysql-test/r/rpl_rbr_to_sbr.result: Result change mysql-test/r/rpl_rotate_logs.result: Result change mysql-test/r/rpl_row_basic_11bugs.result: Result change mysql-test/r/rpl_row_charset.result: Result change mysql-test/r/rpl_row_create_table.result: Result change mysql-test/r/rpl_row_delayed_ins.result: Result change mysql-test/r/rpl_row_drop.result: Result change mysql-test/r/rpl_row_flsh_tbls.result: Result change mysql-test/r/rpl_row_inexist_tbl.result: Result change mysql-test/r/rpl_row_log.result: Result change mysql-test/r/rpl_row_log_innodb.result: Result change mysql-test/r/rpl_row_max_relay_size.result: Result change mysql-test/r/rpl_row_reset_slave.result: Result change mysql-test/r/rpl_row_until.result: Result change mysql-test/r/rpl_server_id1.result: Result change mysql-test/r/rpl_server_id2.result: Result change mysql-test/r/rpl_sp.result: Result change mysql-test/r/rpl_stm_charset.result: Result change mysql-test/r/rpl_stm_flsh_tbls.result: Result change mysql-test/r/rpl_stm_log.result: Result change mysql-test/r/rpl_stm_max_relay_size.result: Result change mysql-test/r/rpl_stm_multi_query.result: Result change mysql-test/r/rpl_stm_reset_slave.result: Result change mysql-test/r/rpl_stm_until.result: Result change mysql-test/r/rpl_switch_stm_row_mixed.result: Result change mysql-test/r/rpl_truncate_2myisam.result: Result change mysql-test/r/rpl_truncate_3innodb.result: Result change mysql-test/r/rpl_truncate_7ndb.result: Result change mysql-test/r/user_var-binlog.result: Result change mysql-test/t/binlog_row_mix_innodb_myisam.test: Binlog position change mysql-test/t/binlog_stm_mix_innodb_myisam.test: Binlog position change mysql-test/t/ctype_cp932_binlog_stm.test: Binlog position change mysql-test/t/mysqlbinlog.test: Binlog position change mysql-test/t/mysqlbinlog2.test: Binlog position change mysql-test/t/rpl_loaddata_s.test: Binlog position change mysql-test/t/rpl_log_pos.test: Binlog position change mysql-test/t/rpl_row_basic_11bugs.test: Binlog position change mysql-test/t/rpl_row_create_table.test: Binlog position change mysql-test/t/rpl_row_flsh_tbls.test: Binlog position change mysql-test/t/rpl_row_mysqlbinlog.test: Binlog position change mysql-test/t/rpl_sp.test: Binlog position change mysql-test/t/rpl_stm_flsh_tbls.test: Binlog position change mysql-test/t/rpl_switch_stm_row_mixed.test: Binlog position change mysql-test/t/user_var-binlog.test: Binlog position change sql/Makefile.am: Adding file rpl_constants.h with constants for replication. sql/log_event.cc: Changing prototype for read_str() to be const-correct and changing code to match that. Adding incident log event. sql/log_event.h: Adding incident log event. sql/rpl_injector.cc: Adding support for generating incidents into the binary log. sql/rpl_injector.h: Adding support for generating incidents into the binary log. sql/share/errmsg.txt: Adding new error message to indicate an incident. sql/sql_parse.cc: Adding code to generate an incident log event just before executing a REPLACE if the variable "incident_database_resync_on_replace" is set. mysql-test/r/rpl_incident.result: New BitKeeper file ``mysql-test/r/rpl_incident.result'' mysql-test/t/rpl_incident.test: New BitKeeper file ``mysql-test/t/rpl_incident.test'' sql/rpl_constants.h: New BitKeeper file ``sql/rpl_constants.h''
This commit is contained in:
@ -3439,6 +3439,36 @@ end_with_restore_list:
|
||||
break;
|
||||
}
|
||||
case SQLCOM_REPLACE:
|
||||
#ifndef DBUG_OFF
|
||||
if (mysql_bin_log.is_open())
|
||||
{
|
||||
/*
|
||||
Generate an incident log event before writing the real event
|
||||
to the binary log. We put this event is before the statement
|
||||
since that makes it simpler to check that the statement was
|
||||
not executed on the slave (since incidents usually stop the
|
||||
slave).
|
||||
|
||||
Observe that any row events that are generated will be
|
||||
generated before.
|
||||
|
||||
This is only for testing purposes and will not be present in a
|
||||
release build.
|
||||
*/
|
||||
|
||||
Incident incident= INCIDENT_NONE;
|
||||
DBUG_PRINT("debug", ("Just before generate_incident()"));
|
||||
DBUG_EXECUTE_IF("incident_database_resync_on_replace",
|
||||
incident= INCIDENT_LOST_EVENTS;);
|
||||
if (incident)
|
||||
{
|
||||
Incident_log_event ev(thd, incident);
|
||||
mysql_bin_log.write(&ev);
|
||||
mysql_bin_log.rotate_and_purge(RP_FORCE_ROTATE);
|
||||
}
|
||||
DBUG_PRINT("debug", ("Just after generate_incident()"));
|
||||
}
|
||||
#endif
|
||||
case SQLCOM_INSERT:
|
||||
{
|
||||
DBUG_ASSERT(first_table == all_tables && first_table != 0);
|
||||
@ -6102,6 +6132,7 @@ void mysql_init_multi_delete(LEX *lex)
|
||||
lex->query_tables_last= &lex->query_tables;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
When you modify mysql_parse(), you may need to mofify
|
||||
mysql_test_parse_for_slave() in this same file.
|
||||
@ -6114,6 +6145,7 @@ void mysql_parse(THD *thd, char *inBuf, uint length)
|
||||
DBUG_EXECUTE_IF("parser_debug", turn_parser_debug_on(););
|
||||
|
||||
mysql_init_query(thd, (uchar*) inBuf, length);
|
||||
|
||||
if (query_cache_send_result_to_client(thd, inBuf, length) <= 0)
|
||||
{
|
||||
LEX *lex= thd->lex;
|
||||
|
Reference in New Issue
Block a user