Fix counter application order in short read protection

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


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

Branch: refs/heads/master
Commit: 9119cdfe921a2f39a315badd58900a12409d506e
Parents: 3435b0f
Author: Aleksey Yeschenko <alek...@yeschenko.com>
Authored: Wed Sep 13 20:48:01 2017 +0100
Committer: Aleksey Yeschenko <alek...@yeschenko.com>
Committed: Fri Sep 15 17:40:48 2017 +0100

----------------------------------------------------------------------
 consistency_test.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 69 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/9119cdfe/consistency_test.py
----------------------------------------------------------------------
diff --git a/consistency_test.py b/consistency_test.py
index b50d81b..27e5d01 100644
--- a/consistency_test.py
+++ b/consistency_test.py
@@ -10,7 +10,8 @@ from cassandra.query import SimpleStatement
 from nose.plugins.attrib import attr
 from nose.tools import assert_greater_equal
 
-from tools.assertions import assert_length_equal, assert_none, 
assert_unavailable
+from tools.assertions import (assert_all, assert_length_equal, assert_none,
+                              assert_unavailable)
 from dtest import DISABLE_VNODES, MultiError, Tester, debug, create_ks, 
create_cf
 from tools.data import (create_c1c2_table, insert_c1c2, insert_columns,
                         query_c1c2, rows_to_list)
@@ -825,6 +826,73 @@ class TestConsistency(Tester):
         result = list(session.execute(stmt))
         assert_length_equal(result, 5)
 
+    @since('3.0')
+    def test_12872(self):
+        """
+        @jira_ticket CASSANDRA-12872
+        """
+        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 test.test (pk int, ck int, PRIMARY KEY (pk, 
ck));"
+        session.execute(query)
+
+        stmt = session.prepare("INSERT INTO test.test (pk, ck) VALUES (0, ?);")
+        for ck in range(0, 4):
+            session.execute(stmt, [ck], ConsistencyLevel.ALL)
+
+        # node1 |   up | 0 1 2 3
+        # node2 |   up | 0 1 2 3
+
+        node2.stop(wait_other_notice=True)
+
+        # node1 |   up | 0 1 2 3
+        # node2 | down | 0 1 2 3
+
+        session.execute('DELETE FROM test.test WHERE pk = 0 AND ck IN (1, 2, 
3);')
+
+        # node1 |   up | 0 x x x
+        # node2 | down | 0 1 2 3
+
+        session.execute('INSERT INTO test.test (pk, ck) VALUES (0, 5);')
+
+        # node1 |   up | 0 x x x   5
+        # node2 | down | 0 1 2 3
+
+        node2.start(wait_other_notice=True)
+        node1.stop(wait_other_notice=True)
+
+        # node1 | down | 0 x x x   5
+        # node2 |   up | 0 1 2 3
+
+        session = self.patient_cql_connection(node2)
+
+        session.execute('INSERT INTO test.test (pk, ck) VALUES (0, 4);')
+
+        # node1 | down | 0 x x x   5
+        # node2 |   up | 0 1 2 3 4
+
+        node1.start(wait_other_notice=True)
+
+        # node1 |   up | 0 x x x   5
+        # node2 |   up | 0 1 2 3 4
+
+        assert_all(session,
+                   'SELECT ck FROM test.test WHERE pk = 0 LIMIT 2;',
+                   [[0], [4]],
+                   cl = ConsistencyLevel.ALL)
+
     def short_read_test(self):
         """
         @jira_ticket CASSANDRA-9460


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

Reply via email to