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


Reply via email to