You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2017/08/29 11:47:44 UTC

cassandra-dtest git commit: Fix short read protection

Repository: cassandra-dtest
Updated Branches:
  refs/heads/master ac9c95607 -> 2ad557dff


Fix short read protection

patch by Aleksey Yeschenko; reviewed by Benedict Elliott Smith for
CASSANDRA-13747


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

Branch: refs/heads/master
Commit: 2ad557dff9f9d4a3c09f0781b3eeeb5fe75b57d0
Parents: ac9c956
Author: Aleksey Yeschenko <al...@yeschenko.com>
Authored: Mon Aug 7 14:06:05 2017 +0100
Committer: Aleksey Yeschenko <al...@yeschenko.com>
Committed: Tue Aug 29 12:47:10 2017 +0100

----------------------------------------------------------------------
 consistency_test.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 53 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra-dtest/blob/2ad557df/consistency_test.py
----------------------------------------------------------------------
diff --git a/consistency_test.py b/consistency_test.py
index 9424b4c..b50d81b 100644
--- a/consistency_test.py
+++ b/consistency_test.py
@@ -772,6 +772,59 @@ class TestAccuracy(TestHelper):
 
 class TestConsistency(Tester):
 
+    @since('3.0')
+    def test_13747(self):
+        """
+        @jira_ticket CASSANDRA-13747
+        """
+        cluster = self.cluster
+
+        # disable hinted handoff and set batch commit log so this doesn't interfere with the test
+        cluster.set_configuration_options(values={'hinted_handoff_enabled': False})
+        cluster.set_batch_commitlog(enabled=True)
+
+        cluster.populate(2).start(wait_other_notice=True)
+        node1, node2 = cluster.nodelist()
+
+        session = self.patient_cql_connection(node1)
+
+        query = "CREATE KEYSPACE IF NOT EXISTS test WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': 2};"
+        session.execute(query)
+
+        query = "CREATE TABLE IF NOT EXISTS test.test (id int PRIMARY KEY);"
+        session.execute(query)
+
+        #
+        # populate the table with 10 rows:
+        #
+
+        # -7509452495886106294 |  5
+        # -4069959284402364209 |  1 x
+        # -3799847372828181882 |  8
+        # -3485513579396041028 |  0 x
+        # -3248873570005575792 |  2
+        # -2729420104000364805 |  4 x
+        #  1634052884888577606 |  7
+        #  2705480034054113608 |  6 x
+        #  3728482343045213994 |  9
+        #  9010454139840013625 |  3 x
+
+        stmt = session.prepare("INSERT INTO test.test (id) VALUES (?);")
+        for id in range(0, 10):
+            session.execute(stmt, [id], ConsistencyLevel.ALL)
+
+        # with node2 down and hints disabled, delete every other row on node1
+        node2.stop(wait_other_notice=True)
+        session.execute("DELETE FROM test.test WHERE id IN (1, 0, 4, 6, 3);")
+
+        # with both nodes up, do a DISTINCT range query with CL.ALL;
+        # prior to CASSANDRA-13747 this would cause an assertion in short read protection code
+        node2.start(wait_other_notice=True)
+        stmt = SimpleStatement("SELECT DISTINCT token(id), id FROM test.test;",
+                               consistency_level = ConsistencyLevel.ALL)
+        result = list(session.execute(stmt))
+        assert_length_equal(result, 5)
+
     def short_read_test(self):
         """
         @jira_ticket CASSANDRA-9460


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