1
0
mirror of https://github.com/codership/wsrep-lib.git synced 2025-07-21 12:22:06 +03:00

Fixes to server state management.

This commit is contained in:
Teemu Ollakka
2018-06-28 14:50:01 +03:00
parent a4f5997045
commit d46c5a6e38

View File

@ -31,16 +31,7 @@ namespace
const wsrep::view& current_view) const wsrep::view& current_view)
{ {
std::ostringstream oss; std::ostringstream oss;
switch (state) oss << current_view.members().size();
{
case wsrep::server_state::s_joined:
case wsrep::server_state::s_synced:
oss << current_view.members().size();
break;
default:
oss << 0;
break;
}
return oss.str(); return oss.str();
} }
@ -48,16 +39,7 @@ namespace
const wsrep::view& current_view) const wsrep::view& current_view)
{ {
std::ostringstream oss; std::ostringstream oss;
switch (state) oss << current_view.own_index();
{
case wsrep::server_state::s_joined:
case wsrep::server_state::s_synced:
oss << current_view.own_index();
break;
default:
oss << -1;
break;
}
return oss.str(); return oss.str();
} }
@ -535,11 +517,11 @@ void wsrep::server_state::on_view(const wsrep::view& view)
<< "name: " << i->name(); << "name: " << i->name();
} }
wsrep::log_info() << "================================================="; wsrep::log_info() << "=================================================";
current_view_ = view;
if (view.status() == wsrep::view::primary) if (view.status() == wsrep::view::primary)
{ {
wsrep::unique_lock<wsrep::mutex> lock(mutex_); wsrep::unique_lock<wsrep::mutex> lock(mutex_);
assert(view.final() == false); assert(view.final() == false);
current_view_ = view;
// Cluster was bootstrapped // Cluster was bootstrapped
if (state_ == s_connected && view.members().size() == 1) if (state_ == s_connected && view.members().size() == 1)
{ {
@ -568,18 +550,11 @@ void wsrep::server_state::on_view(const wsrep::view& view)
{ {
wsrep::unique_lock<wsrep::mutex> lock(mutex_); wsrep::unique_lock<wsrep::mutex> lock(mutex_);
wsrep::log_info() << "Non-primary view"; wsrep::log_info() << "Non-primary view";
if (state_ == s_disconnecting) if (view.final())
{ {
if (view.final()) state(lock, s_disconnected);
{
state(lock, s_disconnected);
}
else
{
wsrep::log_debug() << "Ignoring non-prim while disconnecting";
}
} }
else if (state_ != s_connected) else if (state_ != s_disconnecting)
{ {
state(lock, s_connected); state(lock, s_connected);
} }
@ -742,13 +717,13 @@ void wsrep::server_state::state(
{ {
/* dis, ing, ized, cted, jer, jed, dor, sed, ding */ /* dis, ing, ized, cted, jer, jed, dor, sed, ding */
{ 0, 1, 0, 1, 0, 0, 0, 0, 0}, /* dis */ { 0, 1, 0, 1, 0, 0, 0, 0, 0}, /* dis */
{ 0, 0, 1, 0, 0, 0, 0, 0, 0}, /* ing */ { 1, 0, 1, 0, 0, 0, 0, 0, 0}, /* ing */
{ 0, 0, 0, 1, 0, 1, 0, 0, 0}, /* ized */ { 1, 0, 0, 1, 0, 1, 0, 0, 0}, /* ized */
{ 0, 0, 0, 0, 1, 0, 0, 1, 0}, /* cted */ { 1, 0, 0, 0, 1, 0, 0, 1, 0}, /* cted */
{ 0, 1, 0, 0, 0, 1, 0, 0, 0}, /* jer */ { 1, 1, 0, 0, 0, 1, 0, 0, 0}, /* jer */
{ 0, 0, 0, 0, 0, 0, 0, 1, 1}, /* jed */ { 1, 0, 0, 0, 0, 0, 0, 1, 1}, /* jed */
{ 0, 0, 0, 0, 0, 1, 0, 0, 1}, /* dor */ { 1, 0, 0, 0, 0, 1, 0, 0, 1}, /* dor */
{ 0, 0, 0, 1, 0, 1, 1, 0, 1}, /* sed */ { 1, 0, 0, 1, 0, 1, 1, 0, 1}, /* sed */
{ 1, 0, 0, 0, 0, 0, 0, 0, 0} /* ding */ { 1, 0, 0, 0, 0, 0, 0, 0, 0} /* ding */
}; };