From 73c526949ee58f3d7e2f6ebb418d65d0e415f9a0 Mon Sep 17 00:00:00 2001 From: Philip O'Toole Date: Sun, 21 May 2023 11:46:35 -0400 Subject: [PATCH] More end-to-end testing of removal-on-shutdown --- system_test/e2e/multi_node.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/system_test/e2e/multi_node.py b/system_test/e2e/multi_node.py index 7a9494e9..26348d1c 100644 --- a/system_test/e2e/multi_node.py +++ b/system_test/e2e/multi_node.py @@ -601,8 +601,8 @@ class TestEndToEndSnapRestoreCluster(unittest.TestCase): deprovision_node(self.n2) class TestShutdown(unittest.TestCase): - def test_cluster_remove_on_shutdown(self): - '''Test that removing a node on shutdown leaves a good cluster''' + def test_cluster_leader_remove_on_shutdown(self): + '''Test that removing the leader on shutdown leaves a good cluster''' n0 = Node(RQLITED_PATH, '0', raft_cluster_remove_shutdown=True) n0.start() n0.wait_for_leader() @@ -613,6 +613,8 @@ class TestShutdown(unittest.TestCase): nodes = n0.nodes() self.assertEqual(len(nodes), 2) + nodes = n1.nodes() + self.assertEqual(len(nodes), 2) n0.stop(graceful=True) nodes = n1.nodes() @@ -627,6 +629,34 @@ class TestShutdown(unittest.TestCase): deprovision_node(n0) deprovision_node(n1) + def test_cluster_follower_remove_on_shutdown(self): + '''Test that removing a follower on shutdown leaves a good cluster''' + n0 = Node(RQLITED_PATH, '0', raft_cluster_remove_shutdown=True) + n0.start() + n0.wait_for_leader() + + n1 = Node(RQLITED_PATH, '1', raft_cluster_remove_shutdown=True) + n1.start(join=n0.APIAddr()) + n1.wait_for_leader() + + nodes = n0.nodes() + self.assertEqual(len(nodes), 2) + nodes = n1.nodes() + self.assertEqual(len(nodes), 2) + + n1.stop(graceful=True) + nodes = n0.nodes() + self.assertEqual(len(nodes), 1) + + # Check that we have a working single-node cluster with a leader by doing + # a write. + n0.wait_for_ready() + j = n0.execute('CREATE TABLE foo (id INTEGER NOT NULL PRIMARY KEY, name TEXT)') + self.assertEqual(j, d_("{'results': [{}]}")) + + deprovision_node(n0) + deprovision_node(n1) + if __name__ == "__main__": unittest.main(verbosity=2)