Author: mduerig
Date: Thu Jan 26 17:04:19 2017
New Revision: 1780429
URL: http://svn.apache.org/viewvc?rev=1780429&view=rev
Log:
OAK-5517: SNFE when running compaction after a cancelled gc
Correctly evict the deduplication cache for nodes whenever a compaction run is
aborted
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1780429&r1=1780428&r2=1780429&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
Thu Jan 26 17:04:19 2017
@@ -831,6 +831,16 @@ public class FileStore extends AbstractF
}
}
+ private int compactionAborted(int generation) {
+ gcListener.compactionFailed(generation);
+ return -generation;
+ }
+
+ private int compactionSucceeded(int generation) {
+ gcListener.compactionSucceeded(generation);
+ return generation;
+ }
+
synchronized int compact() {
final int newGeneration = getGcGeneration() + 1;
try {
@@ -854,7 +864,7 @@ public class FileStore extends AbstractF
SegmentNodeState after = compact(before, writer, cancel);
if (after == null) {
gcListener.warn("TarMK GC #{}: compaction cancelled: {}.",
GC_COUNT, cancel);
- return -newGeneration;
+ return compactionAborted(newGeneration);
}
gcListener.info("TarMK GC #{}: compaction cycle 0 completed in
{} ({} ms). Compacted {} to {}",
@@ -878,7 +888,7 @@ public class FileStore extends AbstractF
after = compact(head, writer, cancel);
if (after == null) {
gcListener.warn("TarMK GC #{}: compaction cancelled:
{}.", GC_COUNT, cancel);
- return -newGeneration;
+ return compactionAborted(newGeneration);
}
gcListener.info("TarMK GC #{}: compaction cycle {}
completed in {} ({} ms). Compacted {} against {} to {}",
@@ -920,23 +930,21 @@ public class FileStore extends AbstractF
if (success) {
writer.flush();
- gcListener.compactionSucceeded(newGeneration);
gcListener.info("TarMK GC #{}: compaction succeeded in {}
({} ms), after {} cycles",
GC_COUNT, watch, watch.elapsed(MILLISECONDS),
cycles);
- return newGeneration;
+ return compactionSucceeded(newGeneration);
} else {
- gcListener.compactionFailed(newGeneration);
gcListener.info("TarMK GC #{}: compaction failed after {}
({} ms), and {} cycles",
GC_COUNT, watch, watch.elapsed(MILLISECONDS),
cycles);
- return -newGeneration;
+ return compactionAborted(newGeneration);
}
} catch (InterruptedException e) {
gcListener.error("TarMK GC #" + GC_COUNT + ": compaction
interrupted", e);
currentThread().interrupt();
- return -newGeneration;
- } catch (Exception e) {
+ return compactionAborted(newGeneration);
+ } catch (IOException e) {
gcListener.error("TarMK GC #" + GC_COUNT + ": compaction
encountered an error", e);
- return -newGeneration;
+ return compactionAborted(newGeneration);
}
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java?rev=1780429&r1=1780428&r2=1780429&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
Thu Jan 26 17:04:19 2017
@@ -77,7 +77,6 @@ import org.apache.jackrabbit.oak.stats.C
import org.apache.jackrabbit.oak.stats.DefaultStatisticsProvider;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
@@ -563,7 +562,6 @@ public class CompactionAndCleanupIT {
/**
* See OAK-5517: SNFE when running compaction after a cancelled gc
*/
- @Ignore("OAK-5517") // FIXME OAK-5517: SNFE when running compaction after
a cancelled gc
@Test
public void testCancelCompactionSNFE()
throws Throwable {