Fix missing rows when reading 2.1 SSTables with static columns in 3.0 patch by Aleksey Yeschenko; reviewed by Blake Eggleston for CASSANDRA-14873
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9eee7aa7 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9eee7aa7 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9eee7aa7 Branch: refs/heads/trunk Commit: 9eee7aa7874c17ab28d43ff58c97da889c87e397 Parents: a270ee7 Author: Aleksey Yeshchenko <alek...@apple.com> Authored: Thu Nov 8 14:02:21 2018 -0800 Committer: Aleksey Yeshchenko <alek...@apple.com> Committed: Mon Nov 12 19:27:31 2018 +0000 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../org/apache/cassandra/db/Serializers.java | 3 ++ ...bles-legacy_ka_14873-ka-1-CompressionInfo.db | Bin 0 -> 43 bytes .../legacy_tables-legacy_ka_14873-ka-1-Data.db | Bin 0 -> 232 bytes ...gacy_tables-legacy_ka_14873-ka-1-Digest.sha1 | 1 + ...legacy_tables-legacy_ka_14873-ka-1-Filter.db | Bin 0 -> 16 bytes .../legacy_tables-legacy_ka_14873-ka-1-Index.db | Bin 0 -> 118 bytes ...cy_tables-legacy_ka_14873-ka-1-Statistics.db | Bin 0 -> 4446 bytes ...egacy_tables-legacy_ka_14873-ka-1-Summary.db | Bin 0 -> 92 bytes .../legacy_tables-legacy_ka_14873-ka-1-TOC.txt | 8 ++++ .../cassandra/io/sstable/LegacySSTableTest.java | 38 +++++++++++++++++++ 11 files changed, 51 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index d9eb316..3284250 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.18 + * Fix missing rows when reading 2.1 SSTables with static columns in 3.0 (CASSANDRA-14873) * Move TWCS message 'No compaction necessary for bucket size' to Trace level (CASSANDRA-14884) * Sstable min/max metadata can cause data loss (CASSANDRA-14861) * Dropped columns can cause reverse sstable iteration to return prematurely (CASSANDRA-14838) http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/src/java/org/apache/cassandra/db/Serializers.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/Serializers.java b/src/java/org/apache/cassandra/db/Serializers.java index 348fda3..bf340e7 100644 --- a/src/java/org/apache/cassandra/db/Serializers.java +++ b/src/java/org/apache/cassandra/db/Serializers.java @@ -79,6 +79,9 @@ public class Serializers if (clusteringSize == 0) return Clustering.EMPTY; + if (metadata.isCompound() && CompositeType.isStaticName(bb)) + return Clustering.STATIC_CLUSTERING; + if (!metadata.isCompound()) return new Clustering(bb); http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-CompressionInfo.db ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-CompressionInfo.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-CompressionInfo.db new file mode 100644 index 0000000..4a87419 Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-CompressionInfo.db differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Data.db ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Data.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Data.db new file mode 100644 index 0000000..007cc50 Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Data.db differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Digest.sha1 ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Digest.sha1 b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Digest.sha1 new file mode 100644 index 0000000..71e6242 --- /dev/null +++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Digest.sha1 @@ -0,0 +1 @@ +4060752841 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Filter.db ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Filter.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Filter.db new file mode 100644 index 0000000..7a31048 Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Filter.db differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Index.db ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Index.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Index.db new file mode 100644 index 0000000..7245332 Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Index.db differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Statistics.db ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Statistics.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Statistics.db new file mode 100644 index 0000000..f4b26ee0 Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Statistics.db differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Summary.db ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Summary.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Summary.db new file mode 100644 index 0000000..c1784f4 Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-Summary.db differ http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-TOC.txt ---------------------------------------------------------------------- diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-TOC.txt b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-TOC.txt new file mode 100644 index 0000000..db5ac46 --- /dev/null +++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_14873/legacy_tables-legacy_ka_14873-ka-1-TOC.txt @@ -0,0 +1,8 @@ +Data.db +TOC.txt +Digest.sha1 +Filter.db +Statistics.db +CompressionInfo.db +Summary.db +Index.db http://git-wip-us.apache.org/repos/asf/cassandra/blob/9eee7aa7/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java index 5c65b31..df042e7 100644 --- a/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java +++ b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java @@ -243,6 +243,44 @@ public class LegacySSTableTest } @Test + public void test14873() throws Exception + { + /* + * When reading 2.1 sstables in 3.0 in reverse order it's possible to wrongly return an empty result set if the + * partition being read has a static row, and the read is performed backwards. + */ + + /* + * Contents of the SSTable (column_index_size_in_kb: 1) below: + * + * insert into legacy_tables.legacy_ka_14873 (pkc, sc) values (0, 0); + * insert into legacy_tables.legacy_ka_14873 (pkc, cc, rc) values (0, 5, '5555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555'); + * insert into legacy_tables.legacy_ka_14873 (pkc, cc, rc) values (0, 4, '4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444'); + * insert into legacy_tables.legacy_ka_14873 (pkc, cc, rc) values (0, 3, '3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333'); + * insert into legacy_tables.legacy_ka_14873 (pkc, cc, rc) values (0, 2, '2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222'); + * insert into legacy_tables.legacy_ka_14873 (pkc, cc, rc) values (0, 1, '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'); + */ + + String ddl = + "CREATE TABLE legacy_tables.legacy_ka_14873 (" + + "pkc int, cc int, sc int static, rc text, PRIMARY KEY (pkc, cc)" + + ") WITH CLUSTERING ORDER BY (cc DESC) AND compaction = {'enabled' : 'false', 'class' : 'LeveledCompactionStrategy'};"; + QueryProcessor.executeInternal(ddl); + loadLegacyTable("legacy_%s_14873%s", "ka", ""); + + UntypedResultSet forward = + QueryProcessor.executeOnceInternal( + String.format("SELECT * FROM legacy_tables.legacy_ka_14873 WHERE pkc = 0 AND cc > 0 ORDER BY cc DESC;")); + + UntypedResultSet reverse = + QueryProcessor.executeOnceInternal( + String.format("SELECT * FROM legacy_tables.legacy_ka_14873 WHERE pkc = 0 AND cc > 0 ORDER BY cc ASC;")); + + Assert.assertEquals(5, forward.size()); + Assert.assertEquals(5, reverse.size()); + } + + @Test public void testMultiBlockRangeTombstones() throws Exception { /** --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org