You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by aw...@apache.org on 2017/11/15 21:46:57 UTC

[29/50] cassandra git commit: Add test to reproduce CASSANDRA-12368

Add test to reproduce CASSANDRA-12368


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

Branch: refs/heads/master
Commit: 40f13658c95679a84fba063cd8b83fdda701640f
Parents: 5893020
Author: Paulo Motta <pa...@gmail.com>
Authored: Tue Aug 2 21:01:03 2016 -0300
Committer: Paulo Motta <pa...@apache.org>
Committed: Mon Sep 11 00:02:54 2017 -0500

----------------------------------------------------------------------
 read_repair_test.py | 38 ++++++++++++++++++++++++++++++++------
 1 file changed, 32 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/40f13658/read_repair_test.py
----------------------------------------------------------------------
diff --git a/read_repair_test.py b/read_repair_test.py
index 90286d7..57fbf40 100644
--- a/read_repair_test.py
+++ b/read_repair_test.py
@@ -25,7 +25,15 @@ class TestReadRepair(Tester):
         Test that querying only a subset of all the columns in a row doesn't confuse read-repair to avoid
         the problem described in CASSANDRA-10655.
         """
+        self._test_read_repair()
 
+    def test_read_repair_chance(self):
+        """
+        @jira_ticket CASSANDRA-12368
+        """
+        self._test_read_repair(cl_all=False)
+
+    def _test_read_repair(self, cl_all=True):
         session = self.patient_cql_connection(self.cluster.nodelist()[0])
         session.execute("""CREATE KEYSPACE alter_rf_test
                            WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};""")
@@ -53,12 +61,23 @@ class TestReadRepair(Tester):
         debug("Changing RF from 1 to 3")
         session.execute("""ALTER KEYSPACE alter_rf_test
                            WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};""")
-        cl_all_stmt = SimpleStatement("SELECT a FROM alter_rf_test.t1 WHERE k=1",
-                                      consistency_level=ConsistencyLevel.ALL)
+
+        if not cl_all:
+            debug("Setting table read repair chance to 1")
+            session.execute("""ALTER TABLE alter_rf_test.t1 WITH read_repair_chance = 1;""")
+
+        cl = ConsistencyLevel.ALL if cl_all else ConsistencyLevel.ONE
+
         debug("Executing SELECT on non-initial replica to trigger read repair " + non_replicas[0].name)
         read_repair_session = self.patient_exclusive_cql_connection(non_replicas[0])
-        # result of the CL ALL query contains only the selected column
-        assert_one(read_repair_session, "SELECT a FROM alter_rf_test.t1 WHERE k=1", [1], cl=ConsistencyLevel.ALL)
+
+        if cl_all:
+            # result of the read repair query at cl=ALL contains only the selected column
+            assert_one(read_repair_session, "SELECT a FROM alter_rf_test.t1 WHERE k=1", [1], cl=cl)
+        else:
+            # With background read repair at CL=ONE, result may or may not be correct
+            stmt = SimpleStatement("SELECT a FROM alter_rf_test.t1 WHERE k=1", consistency_level=cl)
+            session.execute(stmt)
 
         # Check the results of the read repair by querying each replica again at CL ONE
         debug("Re-running SELECTs at CL ONE to verify read repair")
@@ -69,11 +88,18 @@ class TestReadRepair(Tester):
             # Column a must be 1 everywhere, and column b must be either 1 or None everywhere
             self.assertIn(res[0][:2], [[1, 1], [1, None]])
 
-        # Now query at ALL but selecting all columns
+        # Now query selecting all columns
         query = "SELECT * FROM alter_rf_test.t1 WHERE k=1"
         debug("Executing SELECT on non-initial replica to trigger read repair " + non_replicas[0].name)
         read_repair_session = self.patient_exclusive_cql_connection(non_replicas[0])
-        assert_one(session, query, [1, 1, 1], cl=ConsistencyLevel.ALL)
+
+        if cl_all:
+            # result of the read repair query at cl=ALL should contain all columns
+            assert_one(session, query, [1, 1, 1], cl=cl)
+        else:
+            # With background read repair at CL=ONE, result may or may not be correct
+            stmt = SimpleStatement(query, consistency_level=cl)
+            session.execute(stmt)
 
         # Check all replica is fully up to date
         debug("Re-running SELECTs at CL ONE to verify read repair")


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