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 2018/09/25 16:05:44 UTC
cassandra-dtest git commit: DESC order reads can fail to return the
last Unfiltered in the partition
Repository: cassandra-dtest
Updated Branches:
refs/heads/master 2accd9998 -> 02c1cd774
DESC order reads can fail to return the last Unfiltered in the partition
patch by Aleksey Yeschenko; reviewed by Sam Tunnicliffe and Benedict
Elliott Smith for CASSANDRA-14766
Project: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/commit/02c1cd77
Tree: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/tree/02c1cd77
Diff: http://git-wip-us.apache.org/repos/asf/cassandra-dtest/diff/02c1cd77
Branch: refs/heads/master
Commit: 02c1cd77439b220a09df1d53891441bb80dcf944
Parents: 2accd99
Author: Aleksey Yeschenko <al...@apple.com>
Authored: Tue Sep 25 14:40:59 2018 +0100
Committer: Aleksey Yeschenko <al...@apple.com>
Committed: Tue Sep 25 15:09:43 2018 +0100
----------------------------------------------------------------------
legacy_sstables_test.py | 58 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 58 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra-dtest/blob/02c1cd77/legacy_sstables_test.py
----------------------------------------------------------------------
diff --git a/legacy_sstables_test.py b/legacy_sstables_test.py
new file mode 100644
index 0000000..bedfbea
--- /dev/null
+++ b/legacy_sstables_test.py
@@ -0,0 +1,58 @@
+import pytest
+
+from cassandra import ConsistencyLevel
+from dtest import Tester
+from tools.assertions import assert_all
+
+since = pytest.mark.since
+
+class TestLegacySSTables(Tester):
+
+ @since('3.0', max_version='4')
+ def test_14766(self):
+ """
+ @jira_ticket CASSANDRA-14766
+
+ A reproduction / regression test to illustrate CASSANDRA-14766: when
+ reading a legacy 2.1 sstable with SSTableReversedIterator, it's possible
+ to skip and not return the last Unfiltered in the last indexed block.
+
+ It would lead to a missing row, if that Unfiltered was a row, or potentially
+ resurrected data, if it's a tombstone.
+ """
+ cluster = self.cluster
+
+ # set column_index_size_in_kb to 1 for a small reproduction sequence
+ cluster.set_configuration_options(values={'column_index_size_in_kb': 1})
+
+ # start with 2.1.20 to generate a legacy sstable
+ cluster.set_install_dir(version='2.1.20')
+
+ cluster.populate(1).start(wait_other_notice=True)
+ node1 = cluster.nodelist()[0]
+ session = self.patient_cql_connection(node1)
+
+ query = "CREATE KEYSPACE test WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': 1};"
+ session.execute(query)
+
+ query = 'CREATE TABLE test.test (pk int, ck int, value text, PRIMARY KEY (pk, ck));'
+ session.execute(query)
+
+ # insert 4 rows to fill 2 index blocks and flush the 2.1 sstable
+ stmt = session.prepare('INSERT INTO test.test (pk, ck, value) VALUES (0, ?, ?);');
+ for i in range(0, 4):
+ session.execute(stmt, [i, '0' * 512])
+ cluster.flush()
+
+ # stop, upgrade to current version (3.0 or 3.11), start up
+ node1.stop(wait_other_notice=True)
+ self.set_node_to_current_version(node1)
+ node1.start(wait_other_notice=True)
+ session = self.patient_cql_connection(node1)
+
+ # make sure all 4 rows are there when reading backwards
+ # prior to the fix, this would return 3 rows (ck = 2, 1, 0), skipping ck = 3
+ assert_all(session,
+ "SELECT ck FROM test.test WHERE pk = 0 ORDER BY ck DESC;",
+ [[3], [2], [1], [0]],
+ cl=ConsistencyLevel.ONE)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org