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

Add application defined sequential consistency for certification

Client state methods before_prepare() and before_commit() accept
a callback which is called by the provider after it can guarantee
sequential consistency. This allows application threads which wish to
maintain sequential consistency to enter before_prepare() and
before_commit() calls concurrently without waiting the prior call
to finish.
This commit is contained in:
Teemu Ollakka
2024-11-21 14:29:11 +02:00
parent 1c61b809d1
commit 3de594b662
9 changed files with 113 additions and 31 deletions

View File

@ -332,10 +332,37 @@ namespace wsrep
virtual int append_key(wsrep::ws_handle&, const wsrep::key&) = 0;
virtual enum status append_data(
wsrep::ws_handle&, const wsrep::const_buffer&) = 0;
/**
* Callback for application defined sequential consistency.
* The provider will call
* the callback once it can guarantee sequential consistency. */
typedef struct seq_cb {
/** Opaque caller context */
void *ctx;
/** Function to be called by the provider when sequential
* consistency is guaranteed. */
void (*fn)(void *ctx);
} seq_cb_t;
/**
* Certify the write set.
*
* @param client_id[in] Id of the client session.
* @param ws_handle[in,out] Write set handle associated to the current
* transaction.
* @param flags[in] Flags associated to the write set (see struct flag).
* @param ws_meta[out] Write set meta data associated to the
* replicated write set.
* @param seq_cb[in] Optional callback for application defined
* sequential consistency.
*
* @return Status code defined in struct status.
*/
virtual enum status
certify(wsrep::client_id, wsrep::ws_handle&,
int,
wsrep::ws_meta&) = 0;
certify(wsrep::client_id client_id, wsrep::ws_handle& ws_handle,
int flags, wsrep::ws_meta& ws_meta, const seq_cb_t* seq_cb)
= 0;
/**
* BF abort a transaction inside provider.
*