1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-28 20:02:00 +03:00

Assertion transaction.is_streaming() in wsrep::transaction::adopt()

Assertion is_streaming() fires in transaction::adopt() when a
transaction is BF aborted, while it is in s_executing state, and it
manages to complete rollback and cleanup while the BF aborter is
executing streaming_rollback() with client_state lock is unlocked.
In this case method transaction::adopt() finds a transaction that is
no longer marked as streaming, triggering the assertion.
A condition variable and flag streaming_rollback_in_progress_ now
prevents a client thread to finish rollback, even if the BF aborter
has temporarily unlocked the client_state lock.
This commit is contained in:
Daniele Sciascia
2021-09-02 13:22:45 +02:00
parent fb86776354
commit 0151e98802
2 changed files with 30 additions and 13 deletions

View File

@ -276,6 +276,7 @@ namespace wsrep
wsrep::sr_key_set sr_keys_;
wsrep::mutable_buffer apply_error_buf_;
wsrep::xid xid_;
bool streaming_rollback_in_progress_;
};
static inline const char* to_c_string(enum wsrep::transaction::state state)