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

Reply via email to