mirror of
https://github.com/codership/wsrep-lib.git
synced 2025-07-21 12:22:06 +03:00
Handle disconnecting state in on_sync()
When disconnecting from the group, the sync event from the provider must not change the state back to synced.
This commit is contained in:
@ -1051,6 +1051,8 @@ void wsrep::server_state::on_sync()
|
|||||||
{
|
{
|
||||||
switch (state_)
|
switch (state_)
|
||||||
{
|
{
|
||||||
|
case s_disconnecting:
|
||||||
|
break;
|
||||||
case s_synced:
|
case s_synced:
|
||||||
break;
|
break;
|
||||||
case s_connected: // Seed node path: provider becomes
|
case s_connected: // Seed node path: provider becomes
|
||||||
@ -1077,7 +1079,7 @@ void wsrep::server_state::on_sync()
|
|||||||
// Calls to on_sync() in synced state are possible if
|
// Calls to on_sync() in synced state are possible if
|
||||||
// server desyncs itself from the group. Provider does not
|
// server desyncs itself from the group. Provider does not
|
||||||
// inform about this through callbacks.
|
// inform about this through callbacks.
|
||||||
if (state_ != s_synced)
|
if (state_ != s_synced && state_ != s_disconnecting)
|
||||||
{
|
{
|
||||||
state(lock, s_synced);
|
state(lock, s_synced);
|
||||||
}
|
}
|
||||||
|
@ -935,3 +935,14 @@ BOOST_FIXTURE_TEST_CASE(server_state_xa_not_orphaned,
|
|||||||
BOOST_REQUIRE(not ss.find_streaming_applier(
|
BOOST_REQUIRE(not ss.find_streaming_applier(
|
||||||
meta_commit_s3.server_id(), meta_commit_s3.transaction_id()));
|
meta_commit_s3.server_id(), meta_commit_s3.transaction_id()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_FIXTURE_TEST_CASE(server_state_sync_in_disconnecting,
|
||||||
|
sst_first_server_fixture)
|
||||||
|
{
|
||||||
|
bootstrap();
|
||||||
|
ss.disconnect();
|
||||||
|
BOOST_REQUIRE(ss.state() == wsrep::server_state::s_disconnecting);
|
||||||
|
// Synced event from the provider must not change the state.
|
||||||
|
ss.on_sync();
|
||||||
|
BOOST_REQUIRE(ss.state() == wsrep::server_state::s_disconnecting);
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user