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

Support for detaching prepared XA transactions

Add support for detaching XA transactions. This is useful for handling
the case where the DBMS client has a transaction in prepared state and
disconnects. Before disconnect, the DBMS calls the newly introduced
client_state::xa_detach(), to cleanup the local transaction and
convert it to a high priority transaction. The DBMS may later attempt
to terminate the transaction through client_state::commit_by_xid() or
client_state::rollback_by_xid().

Also in this patch:

- Fix client_state::close() so that it does not rollback transactions
  in prepared state
- Changed class wsrep::xid representation to hold enough information
  so that DBMS can convert to its native representation
- Fix potential infinite loop in
  server_state::find_streaming_applier(wsrep:xid&)
- Append SR keys on prepare fragment and make it pa_unsafe
- Handle one phase commit (simply fall back to two phase)
- Do not rollback prepared streaming clients in
  server_state::close_orphaned_transactions()
This commit is contained in:
Daniele Sciascia
2020-03-25 15:40:24 +01:00
parent 2da6e4894e
commit 965642eded
9 changed files with 167 additions and 29 deletions

View File

@ -125,17 +125,17 @@ namespace wsrep
bool is_xa() const
{
return !xid_.empty();
return !xid_.is_null();
}
void assign_xid(const wsrep::xid& xid)
{
assert(active());
assert(xid_.empty());
assert(!is_xa());
xid_ = xid;
}
const wsrep::xid xid() const
const wsrep::xid& xid() const
{
return xid_;
}
@ -144,6 +144,8 @@ namespace wsrep
int commit_or_rollback_by_xid(const wsrep::xid& xid, bool commit);
void xa_detach();
bool pa_unsafe() const { return pa_unsafe_; }
void pa_unsafe(bool pa_unsafe) { pa_unsafe_ = pa_unsafe; }