From 9372c38c6b75dfc62a6eca6b2bf7bc3ccdd00f29 Mon Sep 17 00:00:00 2001 From: "mats@romeo.(none)" <> Date: Wed, 1 Nov 2006 15:35:37 +0100 Subject: BUG#23171 (Illegal slave restart group position): First patch preparing for restructuring the event execution and event skipping. This patch renames the existing (virtual) function exec_event() to be a primitive for implementing the real patch. Also, the virtual function advance_coord_impl() is added to advance the binary/relay log coordinates, and two non-virtual functions exec_event() [sic] and skip_event() is added that will contain the business logic for executing and skipping events respectively. --- sql/log_event.h | 213 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 171 insertions(+), 42 deletions(-) (limited to 'sql/log_event.h') diff --git a/sql/log_event.h b/sql/log_event.h index 81ce2f18b4d..794cf410841 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -477,6 +477,7 @@ class THD; class Format_description_log_event; struct st_relay_log_info; +typedef st_relay_log_info RELAY_LOG_INFO; #ifdef MYSQL_CLIENT /* @@ -631,16 +632,48 @@ public: static void init_show_field_list(List* field_list); #ifdef HAVE_REPLICATION int net_send(Protocol *protocol, const char* log_name, my_off_t pos); + + + /** + Execute the event to change the database and update the binary + log coordinates. + + @param rli Pointer to relay log information + + @retval 0 The event was successfully executed. + @retval errno Error code when the execution failed + */ + + int exec_event(RELAY_LOG_INFO *rli) + { + // !!! Just chaining the calls in this first patch + return apply_event_impl(rli); + } + + + /** + Skip the event by just updating the binary log coordinates. + + @param rli Pointer to relay log information + + @retval 0 The event was successfully executed. + @retval errno Error code when the execution failed + */ + + int skip_event(RELAY_LOG_INFO *rli) + { + // !!! Nothing yet. This is just the reorgainization patch. + return 0; + } + + /* pack_info() is used by SHOW BINLOG EVENTS; as print() it prepares and sends a string to display to the user, so it resembles print(). */ + virtual void pack_info(Protocol *protocol); - /* - The SQL slave thread calls exec_event() to execute the event; this is where - the slave's data is modified. - */ - virtual int exec_event(struct st_relay_log_info* rli); + #endif /* HAVE_REPLICATION */ virtual const char* get_db() { @@ -713,6 +746,38 @@ public: *description_event); /* returns the human readable name of the event's type */ const char* get_type_str(); + +protected: /* !!! Protected in this patch to allow old usage */ +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + /** + Primitive to apply an event to the database. + + This is where the change to the database is made. + + @param rli Pointer to relay log info structure + + @retval 0 Event applied successfully + @retval errno Error code if event application failed + */ + virtual int apply_event_impl(RELAY_LOG_INFO *rli); + + /** + Advance binary log coordinates. + + This function is called to advance the binary log or relay log + coordinates to just after the event. + + @param rli Pointer to relay log info structure + + @retval 0 Coordinates changed successfully + @retval errno Error code if advancing failed + */ + virtual int advance_coord_impl(RELAY_LOG_INFO *rli) + { + // !!! Dummy implementation for this patch only + return 0; + } +#endif }; /* @@ -753,10 +818,10 @@ public: uint16 error_code; ulong thread_id; /* - For events created by Query_log_event::exec_event (and - Load_log_event::exec_event()) we need the *original* thread id, to be able - to log the event with the original (=master's) thread id (fix for - BUG#1686). + For events created by Query_log_event::apply_event_impl (and + Load_log_event::apply_event_impl()) we need the *original* thread + id, to be able to log the event with the original (=master's) + thread id (fix for BUG#1686). */ ulong slave_proxy_id; @@ -817,9 +882,6 @@ public: const char* get_db() { return db; } #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); - int exec_event(struct st_relay_log_info* rli, const char *query_arg, - uint32 q_len_arg); #endif /* HAVE_REPLICATION */ #else void print_query_header(IO_CACHE* file, PRINT_EVENT_INFO* print_event_info); @@ -848,6 +910,14 @@ public: */ virtual ulong get_post_header_size_for_derived() { return 0; } /* Writes derived event-specific part of post header. */ + +public: /* !!! Public in this patch to allow old usage */ +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); + int apply_event_impl(RELAY_LOG_INFO* rli, + const char *query_arg, + uint32 q_len_arg); +#endif /* HAVE_REPLICATION */ }; @@ -894,9 +964,8 @@ public: uint16 master_port; #ifndef MYSQL_CLIENT - Slave_log_event(THD* thd_arg, struct st_relay_log_info* rli); + Slave_log_event(THD* thd_arg, RELAY_LOG_INFO* rli); void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); #endif @@ -909,6 +978,11 @@ public: #ifndef MYSQL_CLIENT bool write(IO_CACHE* file); #endif + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; #endif /* HAVE_REPLICATION */ @@ -978,12 +1052,6 @@ public: const char* get_db() { return db; } #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli) - { - return exec_event(thd->slave_net,rli,0); - } - int exec_event(NET* net, struct st_relay_log_info* rli, - bool use_rli_only_for_errors); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1015,6 +1083,17 @@ public: + LOAD_HEADER_LEN + sql_ex.data_size() + field_block_len + num_fields); } + +public: /* !!! Public in this patch to allow old usage */ +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli) + { + return apply_event_impl(thd->slave_net,rli,0); + } + + int apply_event_impl(NET* net, RELAY_LOG_INFO* rli, + bool use_rli_only_for_errors); +#endif }; extern char server_version[SERVER_VERSION_LENGTH]; @@ -1072,7 +1151,6 @@ public: Start_log_event_v3(); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else Start_log_event_v3() {} @@ -1092,6 +1170,11 @@ public: return START_V3_HEADER_LEN; //no variable-sized part } virtual bool is_artificial_event() { return artificial_event; } + +protected: /* !!! Protected in this patch to allow old usage */ +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1116,13 +1199,6 @@ public: uint8 *post_header_len; Format_description_log_event(uint8 binlog_ver, const char* server_ver=0); - -#ifndef MYSQL_CLIENT -#ifdef HAVE_REPLICATION - int exec_event(struct st_relay_log_info* rli); -#endif /* HAVE_REPLICATION */ -#endif - Format_description_log_event(const char* buf, uint event_len, const Format_description_log_event* description_event); ~Format_description_log_event() { my_free((gptr)post_header_len, MYF(0)); } @@ -1145,6 +1221,11 @@ public: */ return FORMAT_DESCRIPTION_HEADER_LEN; } + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1168,7 +1249,6 @@ public: {} #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1183,6 +1263,11 @@ public: bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1209,7 +1294,6 @@ class Rand_log_event: public Log_event {} #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1223,6 +1307,11 @@ class Rand_log_event: public Log_event bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; /***************************************************************************** @@ -1246,7 +1335,6 @@ class Xid_log_event: public Log_event Xid_log_event(THD* thd_arg, my_xid x): Log_event(thd_arg,0,0), xid(x) {} #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1260,6 +1348,11 @@ class Xid_log_event: public Log_event bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; /***************************************************************************** @@ -1289,7 +1382,6 @@ public: val_len(val_len_arg), type(type_arg), charset_number(charset_number_arg) { is_null= !val; } void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); #endif @@ -1301,6 +1393,11 @@ public: bool write(IO_CACHE* file); #endif bool is_valid() const { return 1; } + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1315,7 +1412,6 @@ public: #ifndef MYSQL_CLIENT Stop_log_event() :Log_event() {} - int exec_event(struct st_relay_log_info* rli); #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); #endif @@ -1326,6 +1422,11 @@ public: ~Stop_log_event() {} Log_event_type get_type_code() { return STOP_EVENT;} bool is_valid() const { return 1; } + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; /***************************************************************************** @@ -1352,7 +1453,6 @@ public: ulonglong pos_arg, uint flags); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1371,6 +1471,11 @@ public: #ifndef MYSQL_CLIENT bool write(IO_CACHE* file); #endif + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1405,7 +1510,6 @@ public: bool using_trans); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1439,6 +1543,11 @@ public: */ bool write_base(IO_CACHE* file); #endif + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1471,7 +1580,6 @@ public: Append_block_log_event(THD* thd, const char* db_arg, char* block_arg, uint block_len_arg, bool using_trans); #ifdef HAVE_REPLICATION - int exec_event(struct st_relay_log_info* rli); void pack_info(Protocol* protocol); virtual int get_create_or_append() const; #endif /* HAVE_REPLICATION */ @@ -1489,6 +1597,11 @@ public: bool write(IO_CACHE* file); const char* get_db() { return db; } #endif + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1508,7 +1621,6 @@ public: Delete_file_log_event(THD* thd, const char* db_arg, bool using_trans); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1525,6 +1637,11 @@ public: bool write(IO_CACHE* file); const char* get_db() { return db; } #endif + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1544,7 +1661,6 @@ public: Execute_load_log_event(THD* thd, const char* db_arg, bool using_trans); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1560,6 +1676,11 @@ public: bool write(IO_CACHE* file); const char* get_db() { return db; } #endif + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif }; @@ -1629,7 +1750,6 @@ public: bool using_trans, bool suppress_use); #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); - int exec_event(struct st_relay_log_info* rli); #endif /* HAVE_REPLICATION */ #else void print(FILE* file, PRINT_EVENT_INFO* print_event_info); @@ -1648,7 +1768,12 @@ public: #ifndef MYSQL_CLIENT bool write_post_header_for_derived(IO_CACHE* file); #endif - }; + +private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif +}; #ifdef MYSQL_CLIENT @@ -1745,7 +1870,6 @@ public: #endif #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int exec_event(struct st_relay_log_info *rli); virtual void pack_info(Protocol *protocol); #endif @@ -1755,6 +1879,10 @@ public: private: +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); +#endif + #ifndef MYSQL_CLIENT TABLE *m_table; #endif @@ -1826,7 +1954,6 @@ public: flag_set get_flags(flag_set flags) const { return m_flags & flags; } #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int exec_event(struct st_relay_log_info *rli); virtual void pack_info(Protocol *protocol); #endif @@ -1910,6 +2037,8 @@ protected: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) + virtual int apply_event_impl(RELAY_LOG_INFO* rli); + /* Primitive to prepare for a sequence of row executions. -- cgit v1.2.1 From 2ee007ba9d0eb8517a43d767bf2ec4b7fcdad5ad Mon Sep 17 00:00:00 2001 From: "mats@romeo.(none)" <> Date: Thu, 22 Mar 2007 08:32:41 +0100 Subject: BUG#23171: Illegal group log position Tail fixes after re-applying patches to older version of clone. --- sql/log_event.h | 266 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 191 insertions(+), 75 deletions(-) (limited to 'sql/log_event.h') diff --git a/sql/log_event.h b/sql/log_event.h index 794cf410841..8da02a77b50 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -558,6 +558,33 @@ typedef struct st_print_event_info class Log_event { public: + /** + Enumeration of what kinds of skipping (and non-skipping) that can + occur when the slave executes an event. + + @see shall_skip + @see do_shall_skip + */ + enum enum_skip_reason { + /** + Don't skip event. + */ + EVENT_SKIP_NOT, + + /** + Skip event by ignoring it. + + This means that the slave skip counter will not be changed. + */ + EVENT_SKIP_IGNORE, + + /** + Skip event and decrease skip counter. + */ + EVENT_SKIP_COUNT + }; + + /* The offset in the log where this event originally appeared (it is preserved in relay logs, making SHOW SLAVE STATUS able to print @@ -633,40 +660,6 @@ public: #ifdef HAVE_REPLICATION int net_send(Protocol *protocol, const char* log_name, my_off_t pos); - - /** - Execute the event to change the database and update the binary - log coordinates. - - @param rli Pointer to relay log information - - @retval 0 The event was successfully executed. - @retval errno Error code when the execution failed - */ - - int exec_event(RELAY_LOG_INFO *rli) - { - // !!! Just chaining the calls in this first patch - return apply_event_impl(rli); - } - - - /** - Skip the event by just updating the binary log coordinates. - - @param rli Pointer to relay log information - - @retval 0 The event was successfully executed. - @retval errno Error code when the execution failed - */ - - int skip_event(RELAY_LOG_INFO *rli) - { - // !!! Nothing yet. This is just the reorgainization patch. - return 0; - } - - /* pack_info() is used by SHOW BINLOG EVENTS; as print() it prepares and sends a string to display to the user, so it resembles print(). @@ -747,36 +740,125 @@ public: /* returns the human readable name of the event's type */ const char* get_type_str(); -protected: /* !!! Protected in this patch to allow old usage */ #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +public: + + /** + Apply the event to the database. + + This function represents the public interface for applying an + event. + + @see do_apply_event + */ + int apply_event(RELAY_LOG_INFO const *rli) { + return do_apply_event(rli); + } + + + /** + Update the relay log position. + + This function represents the public interface for "stepping over" + the event and will update the relay log information. + + @see do_update_pos + */ + int update_pos(RELAY_LOG_INFO *rli) + { + return do_update_pos(rli); + } + + /** + Decide if the event shall be skipped, and the reason for skipping + it. + + @see do_shall_skip + */ + enum_skip_reason shall_skip(RELAY_LOG_INFO *rli) + { + return do_shall_skip(rli); + } + +protected: /** Primitive to apply an event to the database. This is where the change to the database is made. + @note The primitive is protected instead of private, since there + is a hierarchy of actions to be performed in some cases. + + @see Format_description_log_event::do_apply_event() + @param rli Pointer to relay log info structure @retval 0 Event applied successfully @retval errno Error code if event application failed */ - virtual int apply_event_impl(RELAY_LOG_INFO *rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli) + { + return 0; /* Default implementation does nothing */ + } + /** - Advance binary log coordinates. + Advance relay log coordinates. + + This function is called to advance the relay log coordinates to + just after the event. It is essential that both the relay log + coordinate and the group log position is updated correctly, since + this function is used also for skipping events. - This function is called to advance the binary log or relay log - coordinates to just after the event. + Normally, each implementation of do_update_pos() shall: + + - Update the event position to refer to the position just after + the event. + + - Update the group log position to refer to the position just + after the event if the event is last in a group @param rli Pointer to relay log info structure @retval 0 Coordinates changed successfully - @retval errno Error code if advancing failed + @retval errno Error code if advancing failed (usually just + 1). Observe that handler errors are returned by the + do_apply_event() function, and not by this one. */ - virtual int advance_coord_impl(RELAY_LOG_INFO *rli) - { - // !!! Dummy implementation for this patch only - return 0; - } + virtual int do_update_pos(RELAY_LOG_INFO *rli); + + + /** + Decide if this event shall be skipped or not and the reason for + skipping it. + + The default implementation decide that the event shall be skipped + if either: + + - the server id of the event is the same as the server id of the + server and rli->replicate_same_server_id is true, + or + + - if rli->slave_skip_counter is greater than zero. + + @see do_apply_event + @see do_update_pos + + @retval Log_event::EVENT_SKIP_NOT + The event shall not be skipped and should be applied. + + @retval Log_event::EVENT_SKIP_IGNORE + The event shall be skipped by just ignoring it, i.e., the slave + skip counter shall not be changed. This happends if, for example, + the originating server id of the event is the same as the server + id of the slave. + + @retval Log_event::EVENT_SKIP_COUNT + The event shall be skipped because the slave skip counter was + non-zero. The caller shall decrease the counter by one. + */ + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli); + #endif }; @@ -818,8 +900,8 @@ public: uint16 error_code; ulong thread_id; /* - For events created by Query_log_event::apply_event_impl (and - Load_log_event::apply_event_impl()) we need the *original* thread + For events created by Query_log_event::do_apply_event (and + Load_log_event::do_apply_event()) we need the *original* thread id, to be able to log the event with the original (=master's) thread id (fix for BUG#1686). */ @@ -913,8 +995,10 @@ public: public: /* !!! Public in this patch to allow old usage */ #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); - int apply_event_impl(RELAY_LOG_INFO* rli, + virtual int do_apply_event(RELAY_LOG_INFO const *rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); + + int do_apply_event(RELAY_LOG_INFO const *rli, const char *query_arg, uint32 q_len_arg); #endif /* HAVE_REPLICATION */ @@ -981,7 +1065,7 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const* rli); #endif }; @@ -1086,13 +1170,13 @@ public: public: /* !!! Public in this patch to allow old usage */ #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli) + virtual int do_apply_event(RELAY_LOG_INFO const* rli) { - return apply_event_impl(thd->slave_net,rli,0); + return do_apply_event(thd->slave_net,rli,0); } - int apply_event_impl(NET* net, RELAY_LOG_INFO* rli, - bool use_rli_only_for_errors); + int do_apply_event(NET *net, RELAY_LOG_INFO const *rli, + bool use_rli_only_for_errors); #endif }; @@ -1171,9 +1255,20 @@ public: } virtual bool is_artificial_event() { return artificial_event; } -protected: /* !!! Protected in this patch to allow old usage */ +protected: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO*) + { + /* + Events from ourself should be skipped, but they should not + decrease the slave skip counter. + */ + if (this->server_id == ::server_id) + return Log_event::EVENT_SKIP_IGNORE; + else + return Log_event::EVENT_SKIP_NOT; + } #endif }; @@ -1222,9 +1317,11 @@ public: return FORMAT_DESCRIPTION_HEADER_LEN; } -private: +protected: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli); #endif }; @@ -1266,7 +1363,9 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli); #endif }; @@ -1310,7 +1409,9 @@ class Rand_log_event: public Log_event private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli); #endif }; @@ -1351,7 +1452,7 @@ class Xid_log_event: public Log_event private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); #endif }; @@ -1396,7 +1497,9 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli); #endif }; @@ -1425,7 +1528,18 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli) + { + /* + Events from ourself should be skipped, but they should not + decrease the slave skip counter. + */ + if (this->server_id == ::server_id) + return Log_event::EVENT_SKIP_IGNORE; + else + return Log_event::EVENT_SKIP_NOT; + } #endif }; @@ -1474,7 +1588,8 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); + virtual enum_skip_reason do_shall_skip(RELAY_LOG_INFO *rli); #endif }; @@ -1546,7 +1661,7 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); #endif }; @@ -1600,7 +1715,7 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); #endif }; @@ -1640,7 +1755,7 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); #endif }; @@ -1679,7 +1794,7 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); #endif }; @@ -1771,7 +1886,7 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); #endif }; @@ -1880,7 +1995,8 @@ public: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); + virtual int do_update_pos(RELAY_LOG_INFO *rli); #endif #ifndef MYSQL_CLIENT @@ -2037,7 +2153,7 @@ protected: private: #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) - virtual int apply_event_impl(RELAY_LOG_INFO* rli); + virtual int do_apply_event(RELAY_LOG_INFO const *rli); /* Primitive to prepare for a sequence of row executions. @@ -2086,7 +2202,7 @@ private: RETURN VALUE Error code, if something went wrong, 0 otherwise. */ - virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*, + virtual int do_prepare_row(THD*, RELAY_LOG_INFO const*, TABLE*, char const *row_start, char const **row_end) = 0; /* @@ -2157,7 +2273,7 @@ private: virtual int do_before_row_operations(TABLE *table); virtual int do_after_row_operations(TABLE *table, int error); - virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*, + virtual int do_prepare_row(THD*, RELAY_LOG_INFO const*, TABLE*, char const *row_start, char const **row_end); virtual int do_exec_row(TABLE *table); #endif @@ -2222,7 +2338,7 @@ private: virtual int do_before_row_operations(TABLE *table); virtual int do_after_row_operations(TABLE *table, int error); - virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*, + virtual int do_prepare_row(THD*, RELAY_LOG_INFO const*, TABLE*, char const *row_start, char const **row_end); virtual int do_exec_row(TABLE *table); #endif /* !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) */ @@ -2293,7 +2409,7 @@ private: virtual int do_before_row_operations(TABLE *table); virtual int do_after_row_operations(TABLE *table, int error); - virtual int do_prepare_row(THD*, RELAY_LOG_INFO*, TABLE*, + virtual int do_prepare_row(THD*, RELAY_LOG_INFO const*, TABLE*, char const *row_start, char const **row_end); virtual int do_exec_row(TABLE *table); #endif -- cgit v1.2.1