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:
@ -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 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user