Author: mduerig
Date: Tue Aug 8 15:45:56 2017
New Revision: 1804435
URL: http://svn.apache.org/viewvc?rev=1804435&view=rev
Log:
OAK-6520: Improve tail compactions resilience when base state cannot be
determined
Fall back to full compaction if the base state is not accessible because it
points to a missing segment
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.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=1804435&r1=1804434&r2=1804435&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
Tue Aug 8 15:45:56 2017
@@ -696,8 +696,14 @@ public class FileStore extends AbstractF
if (RecordId.NULL.equals(rootId)) {
return null;
}
- // FIXME OAK-6520: Improve tail compactions resilience when base
state cannot be determined
- return segmentReader.readNode(rootId);
+ try {
+ SegmentNodeState node = segmentReader.readNode(rootId);
+ node.getPropertyCount(); // Resilience: fail early with a
SNFE if the segment is not there
+ return node;
+ } catch (SegmentNotFoundException snfe) {
+ gcListener.error("TarMK GC #" + GC_COUNT + ": Base state " +
rootId + " is not accessible", snfe);
+ return null;
+ }
}
synchronized CompactionResult compactFull() {