1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-04-19 21:02:17 +03:00

Reset TOI meta after releasing total order in provider

This is to keep the TOI meta available in case the provider
implementation needs it.
This commit is contained in:
Teemu Ollakka 2022-03-19 14:45:57 +02:00
parent bccb9997f2
commit 53e60f64c9
5 changed files with 11 additions and 5 deletions

View File

@ -367,6 +367,7 @@ namespace wsrep
* Leave total order isolation critical section * Leave total order isolation critical section
*/ */
virtual enum status leave_toi(wsrep::client_id, virtual enum status leave_toi(wsrep::client_id,
const wsrep::ws_meta& ws_meta,
const wsrep::mutable_buffer& err) = 0; const wsrep::mutable_buffer& err) = 0;
/** /**

View File

@ -395,7 +395,7 @@ wsrep::client_state::poll_enter_toi(
// Successfully entered TOI, but the provider reported failure. // Successfully entered TOI, but the provider reported failure.
// This may happen for example if certification fails. // This may happen for example if certification fails.
// Leave TOI before proceeding. // Leave TOI before proceeding.
if (provider().leave_toi(id_, wsrep::mutable_buffer())) if (provider().leave_toi(id_, poll_meta, wsrep::mutable_buffer()))
{ {
wsrep::log_warning() wsrep::log_warning()
<< "Failed to leave TOI after failure in " << "Failed to leave TOI after failure in "
@ -499,10 +499,12 @@ int wsrep::client_state::leave_toi_local(const wsrep::mutable_buffer& err)
{ {
debug_log_state("leave_toi_local: enter"); debug_log_state("leave_toi_local: enter");
assert(toi_mode_ == m_local); assert(toi_mode_ == m_local);
leave_toi_common();
auto ret = (provider().leave_toi(id_, toi_meta_, err) == provider::success ? 0 : 1);
leave_toi_common();
debug_log_state("leave_toi_local: leave"); debug_log_state("leave_toi_local: leave");
return (provider().leave_toi(id_, err) == provider::success ? 0 : 1);
return ret;
} }
void wsrep::client_state::leave_toi_mode() void wsrep::client_state::leave_toi_mode()
@ -619,7 +621,7 @@ int wsrep::client_state::end_nbo_phase_one(const wsrep::mutable_buffer& err)
assert(mode_ == m_nbo); assert(mode_ == m_nbo);
assert(in_toi()); assert(in_toi());
enum wsrep::provider::status status(provider().leave_toi(id_, err)); enum wsrep::provider::status status(provider().leave_toi(id_, toi_meta_, err));
wsrep::unique_lock<wsrep::mutex> lock(mutex_); wsrep::unique_lock<wsrep::mutex> lock(mutex_);
int ret; int ret;
switch (status) switch (status)
@ -720,7 +722,7 @@ int wsrep::client_state::end_nbo_phase_two(const wsrep::mutable_buffer& err)
assert(toi_mode_ == m_local); assert(toi_mode_ == m_local);
assert(in_toi()); assert(in_toi());
enum wsrep::provider::status status( enum wsrep::provider::status status(
provider().leave_toi(id_, err)); provider().leave_toi(id_, toi_meta_, err));
wsrep::unique_lock<wsrep::mutex> lock(mutex_); wsrep::unique_lock<wsrep::mutex> lock(mutex_);
int ret; int ret;
switch (status) switch (status)

View File

@ -1025,6 +1025,7 @@ wsrep::wsrep_provider_v26::enter_toi(
enum wsrep::provider::status enum wsrep::provider::status
wsrep::wsrep_provider_v26::leave_toi(wsrep::client_id client_id, wsrep::wsrep_provider_v26::leave_toi(wsrep::client_id client_id,
const wsrep::ws_meta&,
const wsrep::mutable_buffer& err) const wsrep::mutable_buffer& err)
{ {
const wsrep_buf_t err_buf = { err.data(), err.size() }; const wsrep_buf_t err_buf = { err.data(), err.size() };

View File

@ -83,6 +83,7 @@ namespace wsrep
int) int)
WSREP_OVERRIDE; WSREP_OVERRIDE;
enum wsrep::provider::status leave_toi(wsrep::client_id, enum wsrep::provider::status leave_toi(wsrep::client_id,
const wsrep::ws_meta& ws_meta,
const wsrep::mutable_buffer&) const wsrep::mutable_buffer&)
WSREP_OVERRIDE; WSREP_OVERRIDE;
std::pair<wsrep::gtid, enum wsrep::provider::status> std::pair<wsrep::gtid, enum wsrep::provider::status>

View File

@ -260,6 +260,7 @@ namespace wsrep
} }
enum wsrep::provider::status leave_toi(wsrep::client_id, enum wsrep::provider::status leave_toi(wsrep::client_id,
const wsrep::ws_meta&,
const wsrep::mutable_buffer&) const wsrep::mutable_buffer&)
WSREP_OVERRIDE WSREP_OVERRIDE
{ return wsrep::provider::success; } { return wsrep::provider::success; }