Fix merge

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

Branch: refs/heads/trunk
Commit: 0f5dd225de6ae995ddbc6d8d099260ed6eabd501
Parents: ebe18bb
Author: Benedict Elliott Smith <bened...@apache.org>
Authored: Tue Jul 7 16:48:45 2015 +0100
Committer: Benedict Elliott Smith <bened...@apache.org>
Committed: Tue Jul 7 17:01:33 2015 +0100

----------------------------------------------------------------------
 .../cassandra/db/compaction/CompactionManager.java   | 15 +++++++++++----
 .../io/sstable/format/big/BigTableReader.java        |  3 +++
 .../apache/cassandra/tools/StandaloneScrubber.java   |  5 +----
 test/unit/org/apache/cassandra/db/ScrubTest.java     |  2 +-
 4 files changed, 16 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/0f5dd225/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java 
b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 4c94fa0..150b926 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -332,7 +332,14 @@ public class CompactionManager implements 
CompactionManagerMBean
         }
     }
 
-    public AllSSTableOpStatus performScrub(final ColumnFamilyStore cfs, final 
boolean skipCorrupted, final boolean checkData) throws InterruptedException, 
ExecutionException
+    public AllSSTableOpStatus performScrub(final ColumnFamilyStore cfs, final 
boolean skipCorrupted, final boolean checkData)
+    throws InterruptedException, ExecutionException
+    {
+        return performScrub(cfs, skipCorrupted, checkData, false);
+    }
+
+    public AllSSTableOpStatus performScrub(final ColumnFamilyStore cfs, final 
boolean skipCorrupted, final boolean checkData, final boolean offline)
+    throws InterruptedException, ExecutionException
     {
         return parallelAllSSTableOperation(cfs, new OneSSTableOperation()
         {
@@ -345,7 +352,7 @@ public class CompactionManager implements 
CompactionManagerMBean
             @Override
             public void execute(LifecycleTransaction input) throws IOException
             {
-                scrubOne(cfs, input, skipCorrupted, checkData);
+                scrubOne(cfs, input, skipCorrupted, checkData, offline);
             }
         }, OperationType.SCRUB);
     }
@@ -691,11 +698,11 @@ public class CompactionManager implements 
CompactionManagerMBean
         }
     }
 
-    private void scrubOne(ColumnFamilyStore cfs, LifecycleTransaction 
modifier, boolean skipCorrupted, boolean checkData) throws IOException
+    private void scrubOne(ColumnFamilyStore cfs, LifecycleTransaction 
modifier, boolean skipCorrupted, boolean checkData, boolean offline) throws 
IOException
     {
         CompactionInfo.Holder scrubInfo = null;
 
-        try (Scrubber scrubber = new Scrubber(cfs, modifier, skipCorrupted, 
false, checkData))
+        try (Scrubber scrubber = new Scrubber(cfs, modifier, skipCorrupted, 
offline, checkData))
         {
             scrubInfo = scrubber.getScrubInfo();
             metrics.beginCompaction(scrubInfo);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0f5dd225/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java 
b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java
index 3f375e7..f427389 100644
--- a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableReader.java
@@ -167,6 +167,9 @@ public class BigTableReader extends SSTableReader
 
         int effectiveInterval = 
indexSummary.getEffectiveIndexIntervalAfterIndex(sampledIndex);
 
+        if (ifile == null)
+            return null;
+
         // scan the on-disk index, starting at the nearest sampled position.
         // The check against IndexInterval is to be exit the loop in the EQ 
case when the key looked for is not present
         // (bloom filter false positive). But note that for non-EQ cases, we 
might need to check the first key of the

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0f5dd225/src/java/org/apache/cassandra/tools/StandaloneScrubber.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/StandaloneScrubber.java 
b/src/java/org/apache/cassandra/tools/StandaloneScrubber.java
index 8982e2f..cd87d8b 100644
--- a/src/java/org/apache/cassandra/tools/StandaloneScrubber.java
+++ b/src/java/org/apache/cassandra/tools/StandaloneScrubber.java
@@ -119,6 +119,7 @@ public class StandaloneScrubber
                 {
                     try (LifecycleTransaction txn = 
LifecycleTransaction.offline(OperationType.SCRUB, sstable))
                     {
+                        txn.obsoleteOriginals(); // make sure originals are 
deleted and avoid NPE if index is missing, CASSANDRA-9591
                         try (Scrubber scrubber = new Scrubber(cfs, txn, 
options.skipCorrupted, handler, true, !options.noValidate))
                         {
                             scrubber.scrub();
@@ -131,10 +132,6 @@ public class StandaloneScrubber
                                 throw t;
                             }
                         }
-
-                        // Remove the sstable (it's been copied by scrub and 
snapshotted)
-                        sstable.markObsolete(null);
-                        sstable.selfRef().release();
                     }
                     catch (Exception e)
                     {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0f5dd225/test/unit/org/apache/cassandra/db/ScrubTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ScrubTest.java 
b/test/unit/org/apache/cassandra/db/ScrubTest.java
index b233e1f..0d90354 100644
--- a/test/unit/org/apache/cassandra/db/ScrubTest.java
+++ b/test/unit/org/apache/cassandra/db/ScrubTest.java
@@ -345,7 +345,7 @@ public class ScrubTest
         for (SSTableReader sstable : cfs.getSSTables())
             new 
File(sstable.descriptor.filenameFor(Component.PRIMARY_INDEX)).delete();
 
-        CompactionManager.instance.performScrub(cfs, false, true);
+        CompactionManager.instance.performScrub(cfs, false, true, true);
 
         // check data is still there
         rows = cfs.getRangeSlice(Util.range("", ""), null, new 
IdentityQueryFilter(), 1000);

Reply via email to