mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-28 20:02:00 +03:00
Incorrect assertion and state handling in after_replay().
If the transaction fails during replay because of certification failure, the provider will return control to applier without terminating the transaction and transaction remains in s_replaying. Fixed transaction::after_statement() to handle the state changes correctly if certification failure is returned from replay. Replaying was extracted to separate private method from after_statement(). Removed transaction::after_replay() as it seems now unnecessary and it bypassed state change sanity checks. Allowed replaying -> committed transaction transition to handle the situation where DBMS allocates a new context and client_state to do the replay.
This commit is contained in:
@ -199,8 +199,6 @@ namespace wsrep
|
||||
|
||||
void clone_for_replay(const wsrep::transaction& other);
|
||||
|
||||
void after_replay(const wsrep::transaction& other);
|
||||
|
||||
bool bf_aborted() const
|
||||
{
|
||||
return (bf_abort_client_state_ != 0);
|
||||
@ -248,6 +246,7 @@ namespace wsrep
|
||||
int append_sr_keys_for_commit();
|
||||
int release_commit_order(wsrep::unique_lock<wsrep::mutex>&);
|
||||
void streaming_rollback(wsrep::unique_lock<wsrep::mutex>&);
|
||||
int replay(wsrep::unique_lock<wsrep::mutex>&);
|
||||
void clear_fragments();
|
||||
void cleanup();
|
||||
void debug_log_state(const char*) const;
|
||||
|
Reference in New Issue
Block a user