Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1 accbfa7ac -> b06218011
  refs/heads/trunk 690fbf3ba -> 69d4322b6


ninja add testing for index summary scan position after downsampling


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

Branch: refs/heads/cassandra-2.1
Commit: b06218011ecb7db15e765f0185c5ec000ba2233c
Parents: accbfa7
Author: Benedict Elliott Smith <[email protected]>
Authored: Wed Mar 18 19:26:28 2015 +0000
Committer: Benedict Elliott Smith <[email protected]>
Committed: Wed Mar 18 19:26:28 2015 +0000

----------------------------------------------------------------------
 .../cassandra/io/sstable/SSTableReader.java     |  3 +-
 .../org/apache/cassandra/io/util/Memory.java    |  2 +
 .../cassandra/io/sstable/IndexSummaryTest.java  | 39 +++++++++++++++-----
 3 files changed, 33 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b0621801/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index f42bfc7..e4a6e85 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@ -1074,7 +1074,8 @@ public class SSTableReader extends SSTable implements 
SelfRefCounted<SSTableRead
         return 
getIndexScanPositionFromBinarySearchResult(indexSummary.binarySearch(key), 
indexSummary);
     }
 
-    private static long getIndexScanPositionFromBinarySearchResult(int 
binarySearchResult, IndexSummary referencedIndexSummary)
+    @VisibleForTesting
+    public static long getIndexScanPositionFromBinarySearchResult(int 
binarySearchResult, IndexSummary referencedIndexSummary)
     {
         if (binarySearchResult == -1)
             return 0;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b0621801/src/java/org/apache/cassandra/io/util/Memory.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/util/Memory.java 
b/src/java/org/apache/cassandra/io/util/Memory.java
index dcb9de6..bbe6049 100644
--- a/src/java/org/apache/cassandra/io/util/Memory.java
+++ b/src/java/org/apache/cassandra/io/util/Memory.java
@@ -330,6 +330,8 @@ public class Memory implements AutoCloseable
 
     public void put(long trgOffset, Memory memory, long srcOffset, long size)
     {
+        checkBounds(trgOffset, trgOffset + size);
+        memory.checkBounds(srcOffset, srcOffset + size);
         unsafe.copyMemory(memory.peer + srcOffset, peer + trgOffset, size);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b0621801/test/unit/org/apache/cassandra/io/sstable/IndexSummaryTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/sstable/IndexSummaryTest.java 
b/test/unit/org/apache/cassandra/io/sstable/IndexSummaryTest.java
index 9c709a3..95183d4 100644
--- a/test/unit/org/apache/cassandra/io/sstable/IndexSummaryTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/IndexSummaryTest.java
@@ -173,20 +173,24 @@ public class IndexSummaryTest
         int downsamplingRound = 1;
         for (int samplingLevel = BASE_SAMPLING_LEVEL - 1; samplingLevel >= 1; 
samplingLevel--)
         {
-            IndexSummary downsampled = downsample(original, samplingLevel, 
128, DatabaseDescriptor.getPartitioner());
-            assertEquals(entriesAtSamplingLevel(samplingLevel, 
original.getMaxNumberOfEntries()), downsampled.size());
-
-            int sampledCount = 0;
-            List<Integer> skipStartPoints = samplePattern.subList(0, 
downsamplingRound);
-            for (int i = 0; i < ORIGINAL_NUM_ENTRIES; i++)
+            try (IndexSummary downsampled = downsample(original, 
samplingLevel, 128, DatabaseDescriptor.getPartitioner());)
             {
-                if (!shouldSkip(i, skipStartPoints))
+                assertEquals(entriesAtSamplingLevel(samplingLevel, 
original.getMaxNumberOfEntries()), downsampled.size());
+
+                int sampledCount = 0;
+                List<Integer> skipStartPoints = samplePattern.subList(0, 
downsamplingRound);
+                for (int i = 0; i < ORIGINAL_NUM_ENTRIES; i++)
                 {
-                    assertEquals(keys.get(i * INDEX_INTERVAL).getKey(), 
ByteBuffer.wrap(downsampled.getKey(sampledCount)));
-                    sampledCount++;
+                    if (!shouldSkip(i, skipStartPoints))
+                    {
+                        assertEquals(keys.get(i * INDEX_INTERVAL).getKey(), 
ByteBuffer.wrap(downsampled.getKey(sampledCount)));
+                        sampledCount++;
+                    }
                 }
+
+                testPosition(original, downsampled, keys);
+                downsamplingRound++;
             }
-            downsamplingRound++;
         }
 
         // downsample one level each time
@@ -195,6 +199,8 @@ public class IndexSummaryTest
         for (int downsampleLevel = BASE_SAMPLING_LEVEL - 1; downsampleLevel >= 
1; downsampleLevel--)
         {
             IndexSummary downsampled = downsample(previous, downsampleLevel, 
128, DatabaseDescriptor.getPartitioner());
+            if (previous != original)
+                previous.close();
             assertEquals(entriesAtSamplingLevel(downsampleLevel, 
original.getMaxNumberOfEntries()), downsampled.size());
 
             int sampledCount = 0;
@@ -208,9 +214,22 @@ public class IndexSummaryTest
                 }
             }
 
+            testPosition(original, downsampled, keys);
             previous = downsampled;
             downsamplingRound++;
         }
+        previous.close();
+        original.close();
+    }
+
+    private void testPosition(IndexSummary original, IndexSummary downsampled, 
Iterable<DecoratedKey> keys)
+    {
+        for (DecoratedKey key : keys)
+        {
+            long orig = 
SSTableReader.getIndexScanPositionFromBinarySearchResult(original.binarySearch(key),
 original);
+            long down = 
SSTableReader.getIndexScanPositionFromBinarySearchResult(downsampled.binarySearch(key),
 downsampled);
+            assert down <= orig;
+        }
     }
 
     @Test

Reply via email to