From db7ddd0b1157cbac9150ee28f0c2ea51caf74db7 Mon Sep 17 00:00:00 2001 From: Teemu Ollakka Date: Thu, 21 Sep 2023 11:59:26 +0300 Subject: [PATCH] Change wait_until_state() early disconnected check The check is done only when SST happens before server initialization to be compatible with Galera. --- src/server_state.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/server_state.cpp b/src/server_state.cpp index fcefcba..d7cc9b2 100644 --- a/src/server_state.cpp +++ b/src/server_state.cpp @@ -1393,6 +1393,14 @@ void wsrep::server_state::wait_until_state( wsrep::unique_lock& lock, enum wsrep::server_state::state state) const { + if (!server_service_.sst_before_init() && state != s_disconnected + && state_ == s_disconnected) + { + std::ostringstream os; + os << "Found server disconnected while waiting state " << state; + throw wsrep::runtime_error(os.str()); + } + ++state_waiters_[state]; while (state_ != state) { @@ -1401,8 +1409,9 @@ void wsrep::server_state::wait_until_state( // or disconnected and the state has been changed to disconnecting, // this usually means that some error was encountered if (state != s_disconnecting && state != s_disconnected - && state_ == s_disconnecting) + && (state_ == s_disconnecting || state_ == s_disconnected)) { + --state_waiters_[state]; throw wsrep::runtime_error("State wait was interrupted"); } }