diff options
author | aelkin/elkin@dsl-hkibras1-ff5dc300-70.dhcp.inet.fi <> | 2007-05-28 22:20:22 +0300 |
---|---|---|
committer | aelkin/elkin@dsl-hkibras1-ff5dc300-70.dhcp.inet.fi <> | 2007-05-28 22:20:22 +0300 |
commit | b8a5a770f02323d307097bcd59ac7ccea742d951 (patch) | |
tree | e6587da95890e8879138617ecd484e1ea6bc30fe /sql/log_event.h | |
parent | 3b598218ff5a72d4fbd32dfcc7d1b1ce6c6a8423 (diff) | |
download | mariadb-git-b8a5a770f02323d307097bcd59ac7ccea742d951.tar.gz |
Bug#22725 Replication outages from ER_SERVER_SHUTDOWN (1053) set in replication events
The reason for the bug was that replaying of a query on slave could not be possible since its event
was recorded with the killed error. Due to the specific of handling INSERT, which per-row-while-loop is
unbreakable to killing, the query on transactional table should have not appeared in binlog unless
there was a call to a stored routine that got interrupted with killing (and then there must be an error
returned out of the loop).
The offered solution added the following rule for binlogging of INSERT that accounts the above
specifics:
For INSERT on transactional-table if the error was not set the only raised flag
is harmless and is ignored via masking out on time of creation of binlog event.
For both table types the combination of raised error and KILLED flag indicates that there
was potentially partial execution on master and consistency is under the question.
In that case the code continues to binlog an event with an appropriate killed error.
The fix relies on the specified behaviour of stored routine that must propagate the error
to the top level query handling if the thd->killed flag was raised in the routine execution.
The patch adds an arg with the default killed-status-unset value to Query_log_event::Query_log_event.
Diffstat (limited to 'sql/log_event.h')
-rw-r--r-- | sql/log_event.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sql/log_event.h b/sql/log_event.h index a1e7adb6487..04aac5d08fc 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -804,7 +804,8 @@ public: #ifndef MYSQL_CLIENT Query_log_event(THD* thd_arg, const char* query_arg, ulong query_length, - bool using_trans, bool suppress_use); + bool using_trans, bool suppress_use, + THD::killed_state killed_err_arg= THD::KILLED_NO_VALUE); const char* get_db() { return db; } #ifdef HAVE_REPLICATION void pack_info(Protocol* protocol); |