adding cluster reconfiguration tests for 9143 (#1468)

* adding cluster reconfiguration tests for 9143

* fixing blank line

* fixing whitespace issue


Project: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/commit/dc8cb3fb
Tree: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/tree/dc8cb3fb
Diff: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/diff/dc8cb3fb

Branch: refs/heads/master
Commit: dc8cb3fb12cad229131b57eb789e41246a108924
Parents: d5c413c
Author: Blake Eggleston <bdeggles...@gmail.com>
Authored: Tue May 9 16:33:08 2017 -0700
Committer: Philip Thompson <ptnapol...@gmail.com>
Committed: Tue May 9 19:33:08 2017 -0400

----------------------------------------------------------------------
 repair_tests/incremental_repair_test.py | 113 ++++++++++++++++++++++++++-
 1 file changed, 112 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra-dtest/blob/dc8cb3fb/repair_tests/incremental_repair_test.py
----------------------------------------------------------------------
diff --git a/repair_tests/incremental_repair_test.py 
b/repair_tests/incremental_repair_test.py
index 270e1fa..a447d56 100644
--- a/repair_tests/incremental_repair_test.py
+++ b/repair_tests/incremental_repair_test.py
@@ -14,7 +14,8 @@ from nose.plugins.attrib import attr
 from dtest import Tester, debug, create_ks, create_cf
 from tools.assertions import assert_almost_equal, assert_one
 from tools.data import insert_c1c2
-from tools.decorators import since
+from tools.decorators import since, no_vnodes
+from tools.misc import new_node
 
 
 class ConsistentState(object):
@@ -647,3 +648,113 @@ class TestIncRepair(Tester):
 
         for out in (node.run_sstablemetadata(keyspace='keyspace1').stdout for 
node in cluster.nodelist() if len(node.get_sstables('keyspace1', 'standard1')) 
> 0):
             self.assertNotIn('Repaired at: 0', out)
+
+    @no_vnodes()
+    @since('4.0')
+    def move_test(self):
+        """ Test repaired data remains in sync after a move """
+        cluster = self.cluster
+        cluster.set_configuration_options(values={'hinted_handoff_enabled': 
False, 'commitlog_sync_period_in_ms': 500})
+        cluster.populate(4, tokens=[0, 2**32, 2**48, -(2**32)]).start()
+        node1, node2, node3, node4 = cluster.nodelist()
+
+        session = self.patient_exclusive_cql_connection(node3)
+        session.execute("CREATE KEYSPACE ks WITH 
REPLICATION={'class':'SimpleStrategy', 'replication_factor': 2}")
+        session.execute("CREATE TABLE ks.tbl (k INT PRIMARY KEY, v INT)")
+
+        # insert some data
+        stmt = SimpleStatement("INSERT INTO ks.tbl (k,v) VALUES (%s, %s)")
+        for i in range(1000):
+            session.execute(stmt, (i, i))
+
+        node1.repair(options=['ks'])
+
+        for i in range(1000):
+            v = i + 1000
+            session.execute(stmt, (v, v))
+
+        # everything should be in sync
+        for node in cluster.nodelist():
+            result = node.repair(options=['ks', '--validate'])
+            self.assertIn("Repaired data is in sync", result.stdout)
+
+        node2.nodetool('move {}'.format(2**16))
+
+        # everything should still be in sync
+        for node in cluster.nodelist():
+            result = node.repair(options=['ks', '--validate'])
+            self.assertIn("Repaired data is in sync", result.stdout)
+
+    @no_vnodes()
+    @since('4.0')
+    def decommission_test(self):
+        """ Test repaired data remains in sync after a decommission """
+        cluster = self.cluster
+        cluster.set_configuration_options(values={'hinted_handoff_enabled': 
False, 'commitlog_sync_period_in_ms': 500})
+        cluster.populate(4).start()
+        node1, node2, node3, node4 = cluster.nodelist()
+
+        session = self.patient_exclusive_cql_connection(node3)
+        session.execute("CREATE KEYSPACE ks WITH 
REPLICATION={'class':'SimpleStrategy', 'replication_factor': 2}")
+        session.execute("CREATE TABLE ks.tbl (k INT PRIMARY KEY, v INT)")
+
+        # insert some data
+        stmt = SimpleStatement("INSERT INTO ks.tbl (k,v) VALUES (%s, %s)")
+        for i in range(1000):
+            session.execute(stmt, (i, i))
+
+        node1.repair(options=['ks'])
+
+        for i in range(1000):
+            v = i + 1000
+            session.execute(stmt, (v, v))
+
+        # everything should be in sync
+        for node in cluster.nodelist():
+            result = node.repair(options=['ks', '--validate'])
+            self.assertIn("Repaired data is in sync", result.stdout)
+
+        node2.nodetool('decommission')
+
+        # everything should still be in sync
+        for node in [node1, node3, node4]:
+            result = node.repair(options=['ks', '--validate'])
+            self.assertIn("Repaired data is in sync", result.stdout)
+
+    @no_vnodes()
+    @since('4.0')
+    def bootstrap_test(self):
+        """ Test repaired data remains in sync after a bootstrap """
+        cluster = self.cluster
+        cluster.set_configuration_options(values={'hinted_handoff_enabled': 
False, 'commitlog_sync_period_in_ms': 500})
+        cluster.populate(3).start()
+        node1, node2, node3 = cluster.nodelist()
+
+        session = self.patient_exclusive_cql_connection(node3)
+        session.execute("CREATE KEYSPACE ks WITH 
REPLICATION={'class':'SimpleStrategy', 'replication_factor': 2}")
+        session.execute("CREATE TABLE ks.tbl (k INT PRIMARY KEY, v INT)")
+
+        # insert some data
+        stmt = SimpleStatement("INSERT INTO ks.tbl (k,v) VALUES (%s, %s)")
+        for i in range(1000):
+            session.execute(stmt, (i, i))
+
+        node1.repair(options=['ks'])
+
+        for i in range(1000):
+            v = i + 1000
+            session.execute(stmt, (v, v))
+
+        # everything should be in sync
+        for node in [node1, node2, node3]:
+            result = node.repair(options=['ks', '--validate'])
+            self.assertIn("Repaired data is in sync", result.stdout)
+
+        node4 = new_node(self.cluster)
+        node4.start(wait_for_binary_proto=True)
+
+        self.assertEqual(len(self.cluster.nodelist()), 4)
+        # everything should still be in sync
+        for node in self.cluster.nodelist():
+            result = node.repair(options=['ks', '--validate'])
+            self.assertIn("Repaired data is in sync", result.stdout)


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to