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() {