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

MDEV-36551: Add interface to report wsrep state change in Galera

This commit is contained in:
Jan Lindström
2025-04-04 12:35:55 +03:00
committed by Jan Lindström
parent 14ce8cab76
commit a2d7d89c1d
5 changed files with 23 additions and 5 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018 Codership Oy <info@codership.com> * Copyright (C) 2018-2025 Codership Oy <info@codership.com>
* *
* This file is part of wsrep-lib. * This file is part of wsrep-lib.
* *
@ -94,6 +94,8 @@ namespace db
void debug_sync(const char*) override { } void debug_sync(const char*) override { }
void debug_crash(const char*) override { } void debug_crash(const char*) override { }
void notify_state_change() override { }
private: private:
db::client& client_; db::client& client_;
wsrep::client_state& client_state_; wsrep::client_state& client_state_;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018 Codership Oy <info@codership.com> * Copyright (C) 2018-2025 Codership Oy <info@codership.com>
* *
* This file is part of wsrep-lib. * This file is part of wsrep-lib.
* *
@ -227,7 +227,13 @@ namespace wsrep
* been enabled. * been enabled.
*/ */
virtual void debug_crash(const char* crash_point) = 0; virtual void debug_crash(const char* crash_point) = 0;
//
// Notify state change interface
//
virtual void notify_state_change() = 0;
}; };
} }
#endif // WSREP_CLIENT_SERVICE_HPP #endif // WSREP_CLIENT_SERVICE_HPP

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018-2019 Codership Oy <info@codership.com> * Copyright (C) 2018-2025 Codership Oy <info@codership.com>
* *
* This file is part of wsrep-lib. * This file is part of wsrep-lib.
* *
@ -1047,6 +1047,7 @@ void wsrep::client_state::state(
} }
state_hist_.push_back(state_); state_hist_.push_back(state_);
state_ = state; state_ = state;
client_service_.notify_state_change();
if (state_hist_.size() > 10) if (state_hist_.size() > 10)
{ {
state_hist_.erase(state_hist_.begin()); state_hist_.erase(state_hist_.begin());
@ -1076,6 +1077,7 @@ void wsrep::client_state::mode(
assert(0); assert(0);
} }
mode_ = mode; mode_ = mode;
client_service_.notify_state_change();
} }
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018 Codership Oy <info@codership.com> * Copyright (C) 2018-2025 Codership Oy <info@codership.com>
* *
* This file is part of wsrep-lib. * This file is part of wsrep-lib.
* *
@ -138,6 +138,7 @@ int wsrep::transaction::start_transaction(
state_hist_.clear(); state_hist_.clear();
ws_handle_ = wsrep::ws_handle(id); ws_handle_ = wsrep::ws_handle(id);
flags(wsrep::provider::flag::start_transaction); flags(wsrep::provider::flag::start_transaction);
client_service_.notify_state_change();
switch (client_state_.mode()) switch (client_state_.mode())
{ {
case wsrep::client_state::m_high_priority: case wsrep::client_state::m_high_priority:
@ -167,6 +168,7 @@ int wsrep::transaction::start_transaction(
id_ = ws_meta.transaction_id(); id_ = ws_meta.transaction_id();
assert(client_state_.mode() == wsrep::client_state::m_high_priority); assert(client_state_.mode() == wsrep::client_state::m_high_priority);
state_ = s_executing; state_ = s_executing;
client_service_.notify_state_change();
state_hist_.clear(); state_hist_.clear();
ws_handle_ = ws_handle; ws_handle_ = ws_handle;
ws_meta_ = ws_meta; ws_meta_ = ws_meta;
@ -1140,6 +1142,7 @@ void wsrep::transaction::clone_for_replay(const wsrep::transaction& other)
ws_meta_ = other.ws_meta_; ws_meta_ = other.ws_meta_;
streaming_context_ = other.streaming_context_; streaming_context_ = other.streaming_context_;
state_ = s_replaying; state_ = s_replaying;
client_service_.notify_state_change();
} }
void wsrep::transaction::assign_xid(const wsrep::xid& xid) void wsrep::transaction::assign_xid(const wsrep::xid& xid)
@ -1383,6 +1386,7 @@ void wsrep::transaction::state(
state_hist_.erase(state_hist_.begin()); state_hist_.erase(state_hist_.begin());
} }
state_ = next_state; state_ = next_state;
client_service_.notify_state_change();
if (state_ == s_must_replay) if (state_ == s_must_replay)
{ {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018 Codership Oy <info@codership.com> * Copyright (C) 2018-2025 Codership Oy <info@codership.com>
* *
* This file is part of wsrep-lib. * This file is part of wsrep-lib.
* *
@ -211,6 +211,10 @@ namespace wsrep
// Not going to do this while unit testing // Not going to do this while unit testing
} }
void notify_state_change() WSREP_OVERRIDE
{
// Not going to do this while unit testing
}
// //
// Knobs to tune the behavior // Knobs to tune the behavior