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 2018/06/14 17:23:13 UTC

[3/6] cassandra git commit: Update current index block pointer when slice precedes partition start

Update current index block pointer when slice precedes partition start

When reverse iterating an indexed sstable partition, if the end bound of
the query slice is < the first unfiltered in the partition, the current
index block pointer is not updated. This causes the reader to incorrectly
jump to the end of the partition and start reading from there once the
initial emtpy iterator has been consumed.

Patch by Sam Tunnicliffe; reviewed by Aleksey Yeschenko and Blake Eggleston
for CASSANDRA-14513


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

Branch: refs/heads/trunk
Commit: eb91942f64972bef04c4e965dcdf788ae1f21a60
Parents: 897b55a
Author: Sam Tunnicliffe <sa...@beobal.com>
Authored: Fri Jun 8 12:57:54 2018 +0100
Committer: Sam Tunnicliffe <sa...@beobal.com>
Committed: Thu Jun 14 18:15:57 2018 +0100

----------------------------------------------------------------------
 CHANGES.txt                                                        | 1 +
 .../cassandra/db/columniterator/AbstractSSTableIterator.java       | 2 +-
 .../cassandra/db/columniterator/SSTableReversedIterator.java       | 1 +
 3 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb91942f/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 94fbcd2..ebf8764 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.0.17
+ * Reverse order queries with range tombstones can cause data loss (CASSANDRA-14513)
  * Fix regression of lagging commitlog flush log message (CASSANDRA-14451)
  * Add Missing dependencies in pom-all (CASSANDRA-14422)
  * Cleanup StartupClusterConnectivityChecker and PING Verb (CASSANDRA-14447)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb91942f/src/java/org/apache/cassandra/db/columniterator/AbstractSSTableIterator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/columniterator/AbstractSSTableIterator.java b/src/java/org/apache/cassandra/db/columniterator/AbstractSSTableIterator.java
index f9e6545..386b2c8 100644
--- a/src/java/org/apache/cassandra/db/columniterator/AbstractSSTableIterator.java
+++ b/src/java/org/apache/cassandra/db/columniterator/AbstractSSTableIterator.java
@@ -420,12 +420,12 @@ abstract class AbstractSSTableIterator implements SliceableUnfilteredRowIterator
             if (blockIdx >= 0 && blockIdx < indexes.size())
             {
                 reader.seekToPosition(columnOffset(blockIdx));
+                mark = reader.file.mark();
                 reader.deserializer.clearState();
             }
 
             currentIndexIdx = blockIdx;
             reader.openMarker = blockIdx > 0 ? indexes.get(blockIdx - 1).endOpenMarker : null;
-            mark = reader.file.mark();
 
             // If we're reading an old format file and we move to the first block in the index (i.e. the
             // head of the partition), we skip the static row as it's already been read when we first opened

http://git-wip-us.apache.org/repos/asf/cassandra/blob/eb91942f/src/java/org/apache/cassandra/db/columniterator/SSTableReversedIterator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/columniterator/SSTableReversedIterator.java b/src/java/org/apache/cassandra/db/columniterator/SSTableReversedIterator.java
index 76d8c4d..d5b46a4 100644
--- a/src/java/org/apache/cassandra/db/columniterator/SSTableReversedIterator.java
+++ b/src/java/org/apache/cassandra/db/columniterator/SSTableReversedIterator.java
@@ -281,6 +281,7 @@ public class SSTableReversedIterator extends AbstractSSTableIterator
             if (startIdx < 0)
             {
                 iterator = Collections.emptyIterator();
+                indexState.setToBlock(startIdx);
                 return;
             }
 


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