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);