Repository: cassandra
Updated Branches:
  refs/heads/trunk 245759942 -> 9ddce25ff


Fix potential exception in SSTableIterator indexed reader

patch by carlyeks; reviewed by slebresne for CASSANDRA-9859


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

Branch: refs/heads/trunk
Commit: 9ddce25ff79efae6edd42c1f2f4c78deba19b4e7
Parents: 2457599
Author: Sylvain Lebresne <[email protected]>
Authored: Wed Jul 22 18:18:23 2015 +0200
Committer: Sylvain Lebresne <[email protected]>
Committed: Wed Jul 22 18:20:03 2015 +0200

----------------------------------------------------------------------
 CHANGES.txt                                                     | 2 +-
 .../cassandra/db/columniterator/AbstractSSTableIterator.java    | 2 +-
 .../org/apache/cassandra/db/columniterator/SSTableIterator.java | 5 +++--
 3 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ddce25f/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 56c3495..7277140 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -3,7 +3,7 @@
  * Metrics should use up to date nomenclature (CASSANDRA-9448)
  * Change CREATE/ALTER TABLE syntax for compression (CASSANDRA-8384)
  * Cleanup crc and adler code for java 8 (CASSANDRA-9650)
- * Storage engine refactor (CASSANDRA-8099, 9743, 9746, 9759, 9781, 9808, 
9825, 9848)
+ * Storage engine refactor (CASSANDRA-8099, 9743, 9746, 9759, 9781, 9808, 
9825, 9848, 9705, 9859)
  * Update Guava to 18.0 (CASSANDRA-9653)
  * Bloom filter false positive ratio is not honoured (CASSANDRA-8413)
  * New option for cassandra-stress to leave a ratio of columns null 
(CASSANDRA-9522)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ddce25f/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 8625112..4a35e80 100644
--- 
a/src/java/org/apache/cassandra/db/columniterator/AbstractSSTableIterator.java
+++ 
b/src/java/org/apache/cassandra/db/columniterator/AbstractSSTableIterator.java
@@ -456,7 +456,7 @@ abstract class AbstractSSTableIterator implements 
SliceableUnfilteredRowIterator
         // Check if we've crossed an index boundary (based on the mark on the 
beginning of the index block).
         public boolean isPastCurrentBlock()
         {
-            return currentIndexIdx < indexes.size() && 
reader.file.bytesPastMark(mark) >= currentIndex().width;
+            return reader.file.bytesPastMark(mark) >= currentIndex().width;
         }
 
         public int currentBlockIdx()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/9ddce25f/src/java/org/apache/cassandra/db/columniterator/SSTableIterator.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/db/columniterator/SSTableIterator.java 
b/src/java/org/apache/cassandra/db/columniterator/SSTableIterator.java
index a58ea3e..64d33dc 100644
--- a/src/java/org/apache/cassandra/db/columniterator/SSTableIterator.java
+++ b/src/java/org/apache/cassandra/db/columniterator/SSTableIterator.java
@@ -252,8 +252,9 @@ public class SSTableIterator extends AbstractSSTableIterator
         protected Unfiltered computeNext() throws IOException
         {
             // Our previous read might have made us cross an index block 
boundary. If so, update our informations.
-            if (indexState.isPastCurrentBlock())
-                indexState.setToBlock(indexState.currentBlockIdx() + 1);
+            int currentBlockIdx = indexState.currentBlockIdx();
+            if (indexState.isPastCurrentBlock() && currentBlockIdx + 1 < 
indexState.blocksCount())
+                indexState.setToBlock(currentBlockIdx + 1);
 
             // Return the next unfiltered unless we've reached the end, or 
we're beyond our slice
             // end (note that unless we're on the last block for the slice, 
there is no point

Reply via email to