You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sa...@apache.org on 2017/05/24 18:13:46 UTC

[1/6] cassandra git commit: Fix current position calculation in OldFormatDeserializer

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-3.0 387258024 -> 62092e45c
  refs/heads/cassandra-3.11 e4cef08d0 -> 6214b1ec8
  refs/heads/trunk baffdeae8 -> ef404053b


Fix current position calculation in OldFormatDeserializer

Patch by Sam Tunnicliffe; reviewed by Jeff Jirsa for CASSANDRA-13525

This patch also adds a unit test for CASSANDRA-13236.


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

Branch: refs/heads/cassandra-3.0
Commit: 62092e45c8bbb75ac9f680188b3746913602507b
Parents: 3872580
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Wed May 10 18:10:51 2017 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Wed May 24 19:01:25 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |   1 +
 .../cassandra/db/UnfilteredDeserializer.java    |  28 +++++++++++--
 ...es-legacy_ka_indexed-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-Data.db | Bin 0 -> 196203 bytes
 ...cy_tables-legacy_ka_indexed-ka-1-Digest.sha1 |   1 +
 ...gacy_tables-legacy_ka_indexed-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...egacy_tables-legacy_ka_indexed-ka-1-Index.db | Bin 0 -> 332 bytes
 ..._tables-legacy_ka_indexed-ka-1-Statistics.db | Bin 0 -> 4450 bytes
 ...acy_tables-legacy_ka_indexed-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-TOC.txt |   8 ++++
 ...cy_ka_indexed_static-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...tables-legacy_ka_indexed_static-ka-1-Data.db | Bin 0 -> 196269 bytes
 ...es-legacy_ka_indexed_static-ka-1-Digest.sha1 |   1 +
 ...bles-legacy_ka_indexed_static-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...ables-legacy_ka_indexed_static-ka-1-Index.db | Bin 0 -> 332 bytes
 ...-legacy_ka_indexed_static-ka-1-Statistics.db | Bin 0 -> 4446 bytes
 ...les-legacy_ka_indexed_static-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...tables-legacy_ka_indexed_static-ka-1-TOC.txt |   8 ++++
 .../cassandra/io/sstable/LegacySSTableTest.java |  39 +++++++++++++++++++
 19 files changed, 83 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 98a1808..fe6ab09 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.14
+ * ReverseIndexedReader may drop rows during 2.1 to 3.0 upgrade (CASSANDRA-13525)
  * Fix repair process violating start/end token limits for small ranges (CASSANDRA-13052)
  * Add storage port options to sstableloader (CASSANDRA-13518)
  * Properly handle quoted index names in cqlsh DESCRIBE output (CASSANDRA-12847)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java b/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
index 92690e1..ea65633 100644
--- a/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
+++ b/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
@@ -256,6 +256,10 @@ public abstract class UnfilteredDeserializer
         // The position in the input after the last data consumption (readNext/skipNext).
         private long lastConsumedPosition;
 
+        // Tracks the size of the last LegacyAtom read from disk, because this needs to be accounted
+        // for when marking lastConsumedPosition after readNext/skipNext
+        private long bytesReadForNextAtom;
+
         private OldFormatDeserializer(CFMetaData metadata,
                                       DataInputPlus in,
                                       SerializationHelper helper,
@@ -272,7 +276,10 @@ public abstract class UnfilteredDeserializer
         {
             try
             {
-                return LegacyLayout.readLegacyAtom(metadata, in, readAllAsDynamic);
+                long pos = currentPosition();
+                LegacyLayout.LegacyAtom atom =  LegacyLayout.readLegacyAtom(metadata, in, readAllAsDynamic);
+                bytesReadForNextAtom = currentPosition() - pos;
+                return atom;
             }
             catch (IOException e)
             {
@@ -359,7 +366,7 @@ public abstract class UnfilteredDeserializer
                 throw new IllegalStateException();
             Unfiltered toReturn = next;
             next = null;
-            lastConsumedPosition = currentPosition();
+            lastConsumedPosition = currentPosition() - bytesReadForNextAtom();
             return toReturn;
         }
 
@@ -368,7 +375,7 @@ public abstract class UnfilteredDeserializer
             if (!hasNext())
                 throw new UnsupportedOperationException();
             next = null;
-            lastConsumedPosition = currentPosition();
+            lastConsumedPosition = currentPosition() - bytesReadForNextAtom();
         }
 
         public long bytesReadForUnconsumedData()
@@ -379,6 +386,21 @@ public abstract class UnfilteredDeserializer
             return currentPosition() - lastConsumedPosition;
         }
 
+        // Reading/skipping an Unfiltered consumes LegacyAtoms from the underlying legacy atom iterator
+        // e.g. hasNext() -> iterator.hasNext() -> iterator.readRow() -> atoms.next()
+        // The stop condition of the loop which groups legacy atoms into rows causes that AtomIterator
+        // to read in the first atom which doesn't belong in the row. So by that point, our position
+        // is actually past the end of the next Unfiltered. To compensate, we record the size of
+        // the last LegacyAtom read and subtract it from the current position when we calculate lastConsumedPosition.
+        // If we don't, then when reading an indexed block, we can over correct and may think that we've
+        // exhausted the block before we actually have.
+        private long bytesReadForNextAtom()
+        {
+            // If we've read anything at all then we will have recorded this in bytesReadForNextAtom,
+            // but being extra careful here just incase this method is called before any reads happen.
+            return iterator.atoms.next == null ? 0 : bytesReadForNextAtom;
+        }
+
         public void clearState()
         {
             next = null;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db
new file mode 100644
index 0000000..ecd3ddb
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db
new file mode 100644
index 0000000..d1e4e2f
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1 b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
new file mode 100644
index 0000000..bce117c
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
@@ -0,0 +1 @@
+76435450
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db
new file mode 100644
index 0000000..00a88b4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db
new file mode 100644
index 0000000..9ba4894
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db
new file mode 100644
index 0000000..a57d32b
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db
new file mode 100644
index 0000000..d60d8f4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
new file mode 100644
index 0000000..25fc863
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
@@ -0,0 +1,8 @@
+Data.db
+Summary.db
+TOC.txt
+Statistics.db
+Digest.sha1
+Filter.db
+Index.db
+CompressionInfo.db

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db
new file mode 100644
index 0000000..09c4cfa
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db
new file mode 100644
index 0000000..40ee3c6
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1 b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
new file mode 100644
index 0000000..55ac08c
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
@@ -0,0 +1 @@
+3851004816
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db
new file mode 100644
index 0000000..00a88b4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db
new file mode 100644
index 0000000..fb6ceed
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db
new file mode 100644
index 0000000..b08f500
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db
new file mode 100644
index 0000000..d60d8f4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
new file mode 100644
index 0000000..6865eca
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
@@ -0,0 +1,8 @@
+CompressionInfo.db
+Summary.db
+Data.db
+Index.db
+Statistics.db
+TOC.txt
+Digest.sha1
+Filter.db

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/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 cefee52..f4f6e85 100644
--- a/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
@@ -146,6 +146,45 @@ public class LegacySSTableTest
             verifyReads(legacyVersion);
         }
     }
+    @Test
+    public void testReverseIterationOfLegacyIndexedSSTable() throws Exception
+    {
+        // During upgrades from 2.1 to 3.0, reverse queries can drop rows before upgradesstables is completed
+        QueryProcessor.executeInternal("CREATE TABLE legacy_tables.legacy_ka_indexed (" +
+                                       "  p int," +
+                                       "  c int," +
+                                       "  v1 int," +
+                                       "  v2 int," +
+                                       "  PRIMARY KEY(p, c)" +
+                                       ")");
+        loadLegacyTable("legacy_%s_indexed%s", "ka", "");
+        UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * " +
+                                                             "FROM legacy_tables.legacy_ka_indexed " +
+                                                             "WHERE p=1 " +
+                                                             "ORDER BY c DESC");
+        Assert.assertEquals(5000, rs.size());
+    }
+
+    @Test
+    public void testReadingLegacyIndexedSSTableWithStaticColumns() throws Exception
+    {
+        // During upgrades from 2.1 to 3.0, reading from tables with static columns errors before upgradesstables
+        // is completed
+        QueryProcessor.executeInternal("CREATE TABLE legacy_tables.legacy_ka_indexed_static (" +
+                                       "  p int," +
+                                       "  c int," +
+                                       "  v1 int," +
+                                       "  v2 int," +
+                                       "  s1 int static," +
+                                       "  s2 int static," +
+                                       "  PRIMARY KEY(p, c)" +
+                                       ")");
+        loadLegacyTable("legacy_%s_indexed_static%s", "ka", "");
+        UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * " +
+                                                             "FROM legacy_tables.legacy_ka_indexed_static " +
+                                                             "WHERE p=1 ");
+        Assert.assertEquals(5000, rs.size());
+    }
 
     private void streamLegacyTables(String legacyVersion) throws Exception
     {


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


[5/6] cassandra git commit: Merge branch 'cassandra-3.0' into cassandra-3.11

Posted by sa...@apache.org.
Merge branch 'cassandra-3.0' into cassandra-3.11


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

Branch: refs/heads/cassandra-3.11
Commit: 6214b1ec86ce349757450f6679e5ef068c9e8783
Parents: e4cef08 62092e4
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Wed May 24 19:09:32 2017 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Wed May 24 19:09:32 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |   1 +
 .../cassandra/db/UnfilteredDeserializer.java    |  28 +++++++++++--
 ...es-legacy_ka_indexed-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-Data.db | Bin 0 -> 196203 bytes
 ...cy_tables-legacy_ka_indexed-ka-1-Digest.sha1 |   1 +
 ...gacy_tables-legacy_ka_indexed-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...egacy_tables-legacy_ka_indexed-ka-1-Index.db | Bin 0 -> 332 bytes
 ..._tables-legacy_ka_indexed-ka-1-Statistics.db | Bin 0 -> 4450 bytes
 ...acy_tables-legacy_ka_indexed-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-TOC.txt |   8 ++++
 ...cy_ka_indexed_static-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...tables-legacy_ka_indexed_static-ka-1-Data.db | Bin 0 -> 196269 bytes
 ...es-legacy_ka_indexed_static-ka-1-Digest.sha1 |   1 +
 ...bles-legacy_ka_indexed_static-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...ables-legacy_ka_indexed_static-ka-1-Index.db | Bin 0 -> 332 bytes
 ...-legacy_ka_indexed_static-ka-1-Statistics.db | Bin 0 -> 4446 bytes
 ...les-legacy_ka_indexed_static-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...tables-legacy_ka_indexed_static-ka-1-TOC.txt |   8 ++++
 .../cassandra/io/sstable/LegacySSTableTest.java |  39 +++++++++++++++++++
 19 files changed, 83 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6214b1ec/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index fd9647e,fe6ab09..48f17c2
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,40 -1,5 +1,41 @@@
 -3.0.14
 +3.11.0
 + * Fix the problem with duplicated rows when using paging with SASI (CASSANDRA-13302)
 + * Allow CONTAINS statements filtering on the partition key and it’s parts (CASSANDRA-13275)
 + * Fall back to even ranges calculation in clusters with vnodes when tokens are distributed unevenly (CASSANDRA-13229)
 + * Fix duration type validation to prevent overflow (CASSANDRA-13218)
 + * Forbid unsupported creation of SASI indexes over partition key columns (CASSANDRA-13228)
 + * Reject multiple values for a key in CQL grammar. (CASSANDRA-13369)
 + * UDA fails without input rows (CASSANDRA-13399)
 + * Fix compaction-stress by using daemonInitialization (CASSANDRA-13188)
 + * V5 protocol flags decoding broken (CASSANDRA-13443)
 + * Use write lock not read lock for removing sstables from compaction strategies. (CASSANDRA-13422)
 + * Use corePoolSize equal to maxPoolSize in JMXEnabledThreadPoolExecutors (CASSANDRA-13329)
 + * Avoid rebuilding SASI indexes containing no values (CASSANDRA-12962)
 + * Add charset to Analyser input stream (CASSANDRA-13151)
 + * Fix testLimitSSTables flake caused by concurrent flush (CASSANDRA-12820)
 + * cdc column addition strikes again (CASSANDRA-13382)
 + * Fix static column indexes (CASSANDRA-13277)
 + * DataOutputBuffer.asNewBuffer broken (CASSANDRA-13298)
 + * unittest CipherFactoryTest failed on MacOS (CASSANDRA-13370)
 + * Forbid SELECT restrictions and CREATE INDEX over non-frozen UDT columns (CASSANDRA-13247)
 + * Default logging we ship will incorrectly print "?:?" for "%F:%L" pattern (CASSANDRA-13317)
 + * Possible AssertionError in UnfilteredRowIteratorWithLowerBound (CASSANDRA-13366)
 + * Support unaligned memory access for AArch64 (CASSANDRA-13326)
 + * Improve SASI range iterator efficiency on intersection with an empty range (CASSANDRA-12915).
 + * Fix equality comparisons of columns using the duration type (CASSANDRA-13174)
 + * Obfuscate password in stress-graphs (CASSANDRA-12233)
 + * Move to FastThreadLocalThread and FastThreadLocal (CASSANDRA-13034)
 + * nodetool stopdaemon errors out (CASSANDRA-13030)
 + * Tables in system_distributed should not use gcgs of 0 (CASSANDRA-12954)
 + * Fix primary index calculation for SASI (CASSANDRA-12910)
 + * More fixes to the TokenAllocator (CASSANDRA-12990)
 + * NoReplicationTokenAllocator should work with zero replication factor (CASSANDRA-12983)
 + * Address message coalescing regression (CASSANDRA-12676)
 + * Delete illegal character from StandardTokenizerImpl.jflex (CASSANDRA-13417)
 + * Fix cqlsh automatic protocol downgrade regression (CASSANDRA-13307)
 + * Tracing payload not passed from QueryMessage to tracing session (CASSANDRA-12835)
 +Merged from 3.0:
+  * ReverseIndexedReader may drop rows during 2.1 to 3.0 upgrade (CASSANDRA-13525)
   * Fix repair process violating start/end token limits for small ranges (CASSANDRA-13052)
   * Add storage port options to sstableloader (CASSANDRA-13518)
   * Properly handle quoted index names in cqlsh DESCRIBE output (CASSANDRA-12847)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6214b1ec/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6214b1ec/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
----------------------------------------------------------------------


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


[6/6] cassandra git commit: Merge branch 'cassandra-3.11' into trunk

Posted by sa...@apache.org.
Merge branch 'cassandra-3.11' into trunk


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

Branch: refs/heads/trunk
Commit: ef404053bf440c2d312d2f602d1aa64f623fb07d
Parents: baffdea 6214b1e
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Wed May 24 19:10:01 2017 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Wed May 24 19:10:01 2017 +0100

----------------------------------------------------------------------

----------------------------------------------------------------------



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


[4/6] cassandra git commit: Merge branch 'cassandra-3.0' into cassandra-3.11

Posted by sa...@apache.org.
Merge branch 'cassandra-3.0' into cassandra-3.11


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

Branch: refs/heads/trunk
Commit: 6214b1ec86ce349757450f6679e5ef068c9e8783
Parents: e4cef08 62092e4
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Wed May 24 19:09:32 2017 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Wed May 24 19:09:32 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |   1 +
 .../cassandra/db/UnfilteredDeserializer.java    |  28 +++++++++++--
 ...es-legacy_ka_indexed-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-Data.db | Bin 0 -> 196203 bytes
 ...cy_tables-legacy_ka_indexed-ka-1-Digest.sha1 |   1 +
 ...gacy_tables-legacy_ka_indexed-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...egacy_tables-legacy_ka_indexed-ka-1-Index.db | Bin 0 -> 332 bytes
 ..._tables-legacy_ka_indexed-ka-1-Statistics.db | Bin 0 -> 4450 bytes
 ...acy_tables-legacy_ka_indexed-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-TOC.txt |   8 ++++
 ...cy_ka_indexed_static-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...tables-legacy_ka_indexed_static-ka-1-Data.db | Bin 0 -> 196269 bytes
 ...es-legacy_ka_indexed_static-ka-1-Digest.sha1 |   1 +
 ...bles-legacy_ka_indexed_static-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...ables-legacy_ka_indexed_static-ka-1-Index.db | Bin 0 -> 332 bytes
 ...-legacy_ka_indexed_static-ka-1-Statistics.db | Bin 0 -> 4446 bytes
 ...les-legacy_ka_indexed_static-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...tables-legacy_ka_indexed_static-ka-1-TOC.txt |   8 ++++
 .../cassandra/io/sstable/LegacySSTableTest.java |  39 +++++++++++++++++++
 19 files changed, 83 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6214b1ec/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index fd9647e,fe6ab09..48f17c2
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,40 -1,5 +1,41 @@@
 -3.0.14
 +3.11.0
 + * Fix the problem with duplicated rows when using paging with SASI (CASSANDRA-13302)
 + * Allow CONTAINS statements filtering on the partition key and it’s parts (CASSANDRA-13275)
 + * Fall back to even ranges calculation in clusters with vnodes when tokens are distributed unevenly (CASSANDRA-13229)
 + * Fix duration type validation to prevent overflow (CASSANDRA-13218)
 + * Forbid unsupported creation of SASI indexes over partition key columns (CASSANDRA-13228)
 + * Reject multiple values for a key in CQL grammar. (CASSANDRA-13369)
 + * UDA fails without input rows (CASSANDRA-13399)
 + * Fix compaction-stress by using daemonInitialization (CASSANDRA-13188)
 + * V5 protocol flags decoding broken (CASSANDRA-13443)
 + * Use write lock not read lock for removing sstables from compaction strategies. (CASSANDRA-13422)
 + * Use corePoolSize equal to maxPoolSize in JMXEnabledThreadPoolExecutors (CASSANDRA-13329)
 + * Avoid rebuilding SASI indexes containing no values (CASSANDRA-12962)
 + * Add charset to Analyser input stream (CASSANDRA-13151)
 + * Fix testLimitSSTables flake caused by concurrent flush (CASSANDRA-12820)
 + * cdc column addition strikes again (CASSANDRA-13382)
 + * Fix static column indexes (CASSANDRA-13277)
 + * DataOutputBuffer.asNewBuffer broken (CASSANDRA-13298)
 + * unittest CipherFactoryTest failed on MacOS (CASSANDRA-13370)
 + * Forbid SELECT restrictions and CREATE INDEX over non-frozen UDT columns (CASSANDRA-13247)
 + * Default logging we ship will incorrectly print "?:?" for "%F:%L" pattern (CASSANDRA-13317)
 + * Possible AssertionError in UnfilteredRowIteratorWithLowerBound (CASSANDRA-13366)
 + * Support unaligned memory access for AArch64 (CASSANDRA-13326)
 + * Improve SASI range iterator efficiency on intersection with an empty range (CASSANDRA-12915).
 + * Fix equality comparisons of columns using the duration type (CASSANDRA-13174)
 + * Obfuscate password in stress-graphs (CASSANDRA-12233)
 + * Move to FastThreadLocalThread and FastThreadLocal (CASSANDRA-13034)
 + * nodetool stopdaemon errors out (CASSANDRA-13030)
 + * Tables in system_distributed should not use gcgs of 0 (CASSANDRA-12954)
 + * Fix primary index calculation for SASI (CASSANDRA-12910)
 + * More fixes to the TokenAllocator (CASSANDRA-12990)
 + * NoReplicationTokenAllocator should work with zero replication factor (CASSANDRA-12983)
 + * Address message coalescing regression (CASSANDRA-12676)
 + * Delete illegal character from StandardTokenizerImpl.jflex (CASSANDRA-13417)
 + * Fix cqlsh automatic protocol downgrade regression (CASSANDRA-13307)
 + * Tracing payload not passed from QueryMessage to tracing session (CASSANDRA-12835)
 +Merged from 3.0:
+  * ReverseIndexedReader may drop rows during 2.1 to 3.0 upgrade (CASSANDRA-13525)
   * Fix repair process violating start/end token limits for small ranges (CASSANDRA-13052)
   * Add storage port options to sstableloader (CASSANDRA-13518)
   * Properly handle quoted index names in cqlsh DESCRIBE output (CASSANDRA-12847)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6214b1ec/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6214b1ec/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
----------------------------------------------------------------------


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


[3/6] cassandra git commit: Fix current position calculation in OldFormatDeserializer

Posted by sa...@apache.org.
Fix current position calculation in OldFormatDeserializer

Patch by Sam Tunnicliffe; reviewed by Jeff Jirsa for CASSANDRA-13525

This patch also adds a unit test for CASSANDRA-13236.


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

Branch: refs/heads/trunk
Commit: 62092e45c8bbb75ac9f680188b3746913602507b
Parents: 3872580
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Wed May 10 18:10:51 2017 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Wed May 24 19:01:25 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |   1 +
 .../cassandra/db/UnfilteredDeserializer.java    |  28 +++++++++++--
 ...es-legacy_ka_indexed-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-Data.db | Bin 0 -> 196203 bytes
 ...cy_tables-legacy_ka_indexed-ka-1-Digest.sha1 |   1 +
 ...gacy_tables-legacy_ka_indexed-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...egacy_tables-legacy_ka_indexed-ka-1-Index.db | Bin 0 -> 332 bytes
 ..._tables-legacy_ka_indexed-ka-1-Statistics.db | Bin 0 -> 4450 bytes
 ...acy_tables-legacy_ka_indexed-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-TOC.txt |   8 ++++
 ...cy_ka_indexed_static-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...tables-legacy_ka_indexed_static-ka-1-Data.db | Bin 0 -> 196269 bytes
 ...es-legacy_ka_indexed_static-ka-1-Digest.sha1 |   1 +
 ...bles-legacy_ka_indexed_static-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...ables-legacy_ka_indexed_static-ka-1-Index.db | Bin 0 -> 332 bytes
 ...-legacy_ka_indexed_static-ka-1-Statistics.db | Bin 0 -> 4446 bytes
 ...les-legacy_ka_indexed_static-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...tables-legacy_ka_indexed_static-ka-1-TOC.txt |   8 ++++
 .../cassandra/io/sstable/LegacySSTableTest.java |  39 +++++++++++++++++++
 19 files changed, 83 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 98a1808..fe6ab09 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.14
+ * ReverseIndexedReader may drop rows during 2.1 to 3.0 upgrade (CASSANDRA-13525)
  * Fix repair process violating start/end token limits for small ranges (CASSANDRA-13052)
  * Add storage port options to sstableloader (CASSANDRA-13518)
  * Properly handle quoted index names in cqlsh DESCRIBE output (CASSANDRA-12847)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java b/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
index 92690e1..ea65633 100644
--- a/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
+++ b/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
@@ -256,6 +256,10 @@ public abstract class UnfilteredDeserializer
         // The position in the input after the last data consumption (readNext/skipNext).
         private long lastConsumedPosition;
 
+        // Tracks the size of the last LegacyAtom read from disk, because this needs to be accounted
+        // for when marking lastConsumedPosition after readNext/skipNext
+        private long bytesReadForNextAtom;
+
         private OldFormatDeserializer(CFMetaData metadata,
                                       DataInputPlus in,
                                       SerializationHelper helper,
@@ -272,7 +276,10 @@ public abstract class UnfilteredDeserializer
         {
             try
             {
-                return LegacyLayout.readLegacyAtom(metadata, in, readAllAsDynamic);
+                long pos = currentPosition();
+                LegacyLayout.LegacyAtom atom =  LegacyLayout.readLegacyAtom(metadata, in, readAllAsDynamic);
+                bytesReadForNextAtom = currentPosition() - pos;
+                return atom;
             }
             catch (IOException e)
             {
@@ -359,7 +366,7 @@ public abstract class UnfilteredDeserializer
                 throw new IllegalStateException();
             Unfiltered toReturn = next;
             next = null;
-            lastConsumedPosition = currentPosition();
+            lastConsumedPosition = currentPosition() - bytesReadForNextAtom();
             return toReturn;
         }
 
@@ -368,7 +375,7 @@ public abstract class UnfilteredDeserializer
             if (!hasNext())
                 throw new UnsupportedOperationException();
             next = null;
-            lastConsumedPosition = currentPosition();
+            lastConsumedPosition = currentPosition() - bytesReadForNextAtom();
         }
 
         public long bytesReadForUnconsumedData()
@@ -379,6 +386,21 @@ public abstract class UnfilteredDeserializer
             return currentPosition() - lastConsumedPosition;
         }
 
+        // Reading/skipping an Unfiltered consumes LegacyAtoms from the underlying legacy atom iterator
+        // e.g. hasNext() -> iterator.hasNext() -> iterator.readRow() -> atoms.next()
+        // The stop condition of the loop which groups legacy atoms into rows causes that AtomIterator
+        // to read in the first atom which doesn't belong in the row. So by that point, our position
+        // is actually past the end of the next Unfiltered. To compensate, we record the size of
+        // the last LegacyAtom read and subtract it from the current position when we calculate lastConsumedPosition.
+        // If we don't, then when reading an indexed block, we can over correct and may think that we've
+        // exhausted the block before we actually have.
+        private long bytesReadForNextAtom()
+        {
+            // If we've read anything at all then we will have recorded this in bytesReadForNextAtom,
+            // but being extra careful here just incase this method is called before any reads happen.
+            return iterator.atoms.next == null ? 0 : bytesReadForNextAtom;
+        }
+
         public void clearState()
         {
             next = null;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db
new file mode 100644
index 0000000..ecd3ddb
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db
new file mode 100644
index 0000000..d1e4e2f
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1 b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
new file mode 100644
index 0000000..bce117c
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
@@ -0,0 +1 @@
+76435450
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db
new file mode 100644
index 0000000..00a88b4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db
new file mode 100644
index 0000000..9ba4894
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db
new file mode 100644
index 0000000..a57d32b
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db
new file mode 100644
index 0000000..d60d8f4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
new file mode 100644
index 0000000..25fc863
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
@@ -0,0 +1,8 @@
+Data.db
+Summary.db
+TOC.txt
+Statistics.db
+Digest.sha1
+Filter.db
+Index.db
+CompressionInfo.db

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db
new file mode 100644
index 0000000..09c4cfa
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db
new file mode 100644
index 0000000..40ee3c6
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1 b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
new file mode 100644
index 0000000..55ac08c
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
@@ -0,0 +1 @@
+3851004816
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db
new file mode 100644
index 0000000..00a88b4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db
new file mode 100644
index 0000000..fb6ceed
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db
new file mode 100644
index 0000000..b08f500
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db
new file mode 100644
index 0000000..d60d8f4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
new file mode 100644
index 0000000..6865eca
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
@@ -0,0 +1,8 @@
+CompressionInfo.db
+Summary.db
+Data.db
+Index.db
+Statistics.db
+TOC.txt
+Digest.sha1
+Filter.db

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/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 cefee52..f4f6e85 100644
--- a/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
@@ -146,6 +146,45 @@ public class LegacySSTableTest
             verifyReads(legacyVersion);
         }
     }
+    @Test
+    public void testReverseIterationOfLegacyIndexedSSTable() throws Exception
+    {
+        // During upgrades from 2.1 to 3.0, reverse queries can drop rows before upgradesstables is completed
+        QueryProcessor.executeInternal("CREATE TABLE legacy_tables.legacy_ka_indexed (" +
+                                       "  p int," +
+                                       "  c int," +
+                                       "  v1 int," +
+                                       "  v2 int," +
+                                       "  PRIMARY KEY(p, c)" +
+                                       ")");
+        loadLegacyTable("legacy_%s_indexed%s", "ka", "");
+        UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * " +
+                                                             "FROM legacy_tables.legacy_ka_indexed " +
+                                                             "WHERE p=1 " +
+                                                             "ORDER BY c DESC");
+        Assert.assertEquals(5000, rs.size());
+    }
+
+    @Test
+    public void testReadingLegacyIndexedSSTableWithStaticColumns() throws Exception
+    {
+        // During upgrades from 2.1 to 3.0, reading from tables with static columns errors before upgradesstables
+        // is completed
+        QueryProcessor.executeInternal("CREATE TABLE legacy_tables.legacy_ka_indexed_static (" +
+                                       "  p int," +
+                                       "  c int," +
+                                       "  v1 int," +
+                                       "  v2 int," +
+                                       "  s1 int static," +
+                                       "  s2 int static," +
+                                       "  PRIMARY KEY(p, c)" +
+                                       ")");
+        loadLegacyTable("legacy_%s_indexed_static%s", "ka", "");
+        UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * " +
+                                                             "FROM legacy_tables.legacy_ka_indexed_static " +
+                                                             "WHERE p=1 ");
+        Assert.assertEquals(5000, rs.size());
+    }
 
     private void streamLegacyTables(String legacyVersion) throws Exception
     {


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


[2/6] cassandra git commit: Fix current position calculation in OldFormatDeserializer

Posted by sa...@apache.org.
Fix current position calculation in OldFormatDeserializer

Patch by Sam Tunnicliffe; reviewed by Jeff Jirsa for CASSANDRA-13525

This patch also adds a unit test for CASSANDRA-13236.


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

Branch: refs/heads/cassandra-3.11
Commit: 62092e45c8bbb75ac9f680188b3746913602507b
Parents: 3872580
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Wed May 10 18:10:51 2017 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Wed May 24 19:01:25 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |   1 +
 .../cassandra/db/UnfilteredDeserializer.java    |  28 +++++++++++--
 ...es-legacy_ka_indexed-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-Data.db | Bin 0 -> 196203 bytes
 ...cy_tables-legacy_ka_indexed-ka-1-Digest.sha1 |   1 +
 ...gacy_tables-legacy_ka_indexed-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...egacy_tables-legacy_ka_indexed-ka-1-Index.db | Bin 0 -> 332 bytes
 ..._tables-legacy_ka_indexed-ka-1-Statistics.db | Bin 0 -> 4450 bytes
 ...acy_tables-legacy_ka_indexed-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...legacy_tables-legacy_ka_indexed-ka-1-TOC.txt |   8 ++++
 ...cy_ka_indexed_static-ka-1-CompressionInfo.db | Bin 0 -> 91 bytes
 ...tables-legacy_ka_indexed_static-ka-1-Data.db | Bin 0 -> 196269 bytes
 ...es-legacy_ka_indexed_static-ka-1-Digest.sha1 |   1 +
 ...bles-legacy_ka_indexed_static-ka-1-Filter.db | Bin 0 -> 16 bytes
 ...ables-legacy_ka_indexed_static-ka-1-Index.db | Bin 0 -> 332 bytes
 ...-legacy_ka_indexed_static-ka-1-Statistics.db | Bin 0 -> 4446 bytes
 ...les-legacy_ka_indexed_static-ka-1-Summary.db | Bin 0 -> 92 bytes
 ...tables-legacy_ka_indexed_static-ka-1-TOC.txt |   8 ++++
 .../cassandra/io/sstable/LegacySSTableTest.java |  39 +++++++++++++++++++
 19 files changed, 83 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 98a1808..fe6ab09 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.14
+ * ReverseIndexedReader may drop rows during 2.1 to 3.0 upgrade (CASSANDRA-13525)
  * Fix repair process violating start/end token limits for small ranges (CASSANDRA-13052)
  * Add storage port options to sstableloader (CASSANDRA-13518)
  * Properly handle quoted index names in cqlsh DESCRIBE output (CASSANDRA-12847)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java b/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
index 92690e1..ea65633 100644
--- a/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
+++ b/src/java/org/apache/cassandra/db/UnfilteredDeserializer.java
@@ -256,6 +256,10 @@ public abstract class UnfilteredDeserializer
         // The position in the input after the last data consumption (readNext/skipNext).
         private long lastConsumedPosition;
 
+        // Tracks the size of the last LegacyAtom read from disk, because this needs to be accounted
+        // for when marking lastConsumedPosition after readNext/skipNext
+        private long bytesReadForNextAtom;
+
         private OldFormatDeserializer(CFMetaData metadata,
                                       DataInputPlus in,
                                       SerializationHelper helper,
@@ -272,7 +276,10 @@ public abstract class UnfilteredDeserializer
         {
             try
             {
-                return LegacyLayout.readLegacyAtom(metadata, in, readAllAsDynamic);
+                long pos = currentPosition();
+                LegacyLayout.LegacyAtom atom =  LegacyLayout.readLegacyAtom(metadata, in, readAllAsDynamic);
+                bytesReadForNextAtom = currentPosition() - pos;
+                return atom;
             }
             catch (IOException e)
             {
@@ -359,7 +366,7 @@ public abstract class UnfilteredDeserializer
                 throw new IllegalStateException();
             Unfiltered toReturn = next;
             next = null;
-            lastConsumedPosition = currentPosition();
+            lastConsumedPosition = currentPosition() - bytesReadForNextAtom();
             return toReturn;
         }
 
@@ -368,7 +375,7 @@ public abstract class UnfilteredDeserializer
             if (!hasNext())
                 throw new UnsupportedOperationException();
             next = null;
-            lastConsumedPosition = currentPosition();
+            lastConsumedPosition = currentPosition() - bytesReadForNextAtom();
         }
 
         public long bytesReadForUnconsumedData()
@@ -379,6 +386,21 @@ public abstract class UnfilteredDeserializer
             return currentPosition() - lastConsumedPosition;
         }
 
+        // Reading/skipping an Unfiltered consumes LegacyAtoms from the underlying legacy atom iterator
+        // e.g. hasNext() -> iterator.hasNext() -> iterator.readRow() -> atoms.next()
+        // The stop condition of the loop which groups legacy atoms into rows causes that AtomIterator
+        // to read in the first atom which doesn't belong in the row. So by that point, our position
+        // is actually past the end of the next Unfiltered. To compensate, we record the size of
+        // the last LegacyAtom read and subtract it from the current position when we calculate lastConsumedPosition.
+        // If we don't, then when reading an indexed block, we can over correct and may think that we've
+        // exhausted the block before we actually have.
+        private long bytesReadForNextAtom()
+        {
+            // If we've read anything at all then we will have recorded this in bytesReadForNextAtom,
+            // but being extra careful here just incase this method is called before any reads happen.
+            return iterator.atoms.next == null ? 0 : bytesReadForNextAtom;
+        }
+
         public void clearState()
         {
             next = null;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db
new file mode 100644
index 0000000..ecd3ddb
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-CompressionInfo.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db
new file mode 100644
index 0000000..d1e4e2f
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Data.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1 b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
new file mode 100644
index 0000000..bce117c
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Digest.sha1
@@ -0,0 +1 @@
+76435450
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db
new file mode 100644
index 0000000..00a88b4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Filter.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db
new file mode 100644
index 0000000..9ba4894
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Index.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db
new file mode 100644
index 0000000..a57d32b
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Statistics.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db
new file mode 100644
index 0000000..d60d8f4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-Summary.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
new file mode 100644
index 0000000..25fc863
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed/legacy_tables-legacy_ka_indexed-ka-1-TOC.txt
@@ -0,0 +1,8 @@
+Data.db
+Summary.db
+TOC.txt
+Statistics.db
+Digest.sha1
+Filter.db
+Index.db
+CompressionInfo.db

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db
new file mode 100644
index 0000000..09c4cfa
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-CompressionInfo.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db
new file mode 100644
index 0000000..40ee3c6
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Data.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1 b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
new file mode 100644
index 0000000..55ac08c
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Digest.sha1
@@ -0,0 +1 @@
+3851004816
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db
new file mode 100644
index 0000000..00a88b4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Filter.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db
new file mode 100644
index 0000000..fb6ceed
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Index.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db
new file mode 100644
index 0000000..b08f500
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Statistics.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db
new file mode 100644
index 0000000..d60d8f4
Binary files /dev/null and b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-Summary.db differ

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
----------------------------------------------------------------------
diff --git a/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
new file mode 100644
index 0000000..6865eca
--- /dev/null
+++ b/test/data/legacy-sstables/ka/legacy_tables/legacy_ka_indexed_static/legacy_tables-legacy_ka_indexed_static-ka-1-TOC.txt
@@ -0,0 +1,8 @@
+CompressionInfo.db
+Summary.db
+Data.db
+Index.db
+Statistics.db
+TOC.txt
+Digest.sha1
+Filter.db

http://git-wip-us.apache.org/repos/asf/cassandra/blob/62092e45/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 cefee52..f4f6e85 100644
--- a/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/LegacySSTableTest.java
@@ -146,6 +146,45 @@ public class LegacySSTableTest
             verifyReads(legacyVersion);
         }
     }
+    @Test
+    public void testReverseIterationOfLegacyIndexedSSTable() throws Exception
+    {
+        // During upgrades from 2.1 to 3.0, reverse queries can drop rows before upgradesstables is completed
+        QueryProcessor.executeInternal("CREATE TABLE legacy_tables.legacy_ka_indexed (" +
+                                       "  p int," +
+                                       "  c int," +
+                                       "  v1 int," +
+                                       "  v2 int," +
+                                       "  PRIMARY KEY(p, c)" +
+                                       ")");
+        loadLegacyTable("legacy_%s_indexed%s", "ka", "");
+        UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * " +
+                                                             "FROM legacy_tables.legacy_ka_indexed " +
+                                                             "WHERE p=1 " +
+                                                             "ORDER BY c DESC");
+        Assert.assertEquals(5000, rs.size());
+    }
+
+    @Test
+    public void testReadingLegacyIndexedSSTableWithStaticColumns() throws Exception
+    {
+        // During upgrades from 2.1 to 3.0, reading from tables with static columns errors before upgradesstables
+        // is completed
+        QueryProcessor.executeInternal("CREATE TABLE legacy_tables.legacy_ka_indexed_static (" +
+                                       "  p int," +
+                                       "  c int," +
+                                       "  v1 int," +
+                                       "  v2 int," +
+                                       "  s1 int static," +
+                                       "  s2 int static," +
+                                       "  PRIMARY KEY(p, c)" +
+                                       ")");
+        loadLegacyTable("legacy_%s_indexed_static%s", "ka", "");
+        UntypedResultSet rs = QueryProcessor.executeInternal("SELECT * " +
+                                                             "FROM legacy_tables.legacy_ka_indexed_static " +
+                                                             "WHERE p=1 ");
+        Assert.assertEquals(5000, rs.size());
+    }
 
     private void streamLegacyTables(String legacyVersion) throws Exception
     {


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