You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ad...@apache.org on 2019/01/29 10:02:03 UTC

svn commit: r1852429 - /jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java

Author: adulceanu
Date: Tue Jan 29 10:02:02 2019
New Revision: 1852429

URL: http://svn.apache.org/viewvc?rev=1852429&view=rev
Log:
OAK-8006 - SegmentBlob#readLongBlobId might cause SegmentNotFoundException on standby
Merge revision 1852424 from trunk

Modified:
    jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java

Modified: jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java?rev=1852429&r1=1852428&r2=1852429&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java (original)
+++ jackrabbit/oak/branches/1.10/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java Tue Jan 29 10:02:02 2019
@@ -203,7 +203,14 @@ public class SegmentBlob extends Record
 
     private static String readLongBlobId(Segment segment, int recordNumber) {
         RecordId blobId = segment.readRecordId(recordNumber, 1);
-        return blobId.getSegment().readString(blobId.getRecordNumber());
+
+        // if the blob id lives in the same segment, avoid reading again
+        // the segment, as it will trigger an SNFE on standby, see OAK-8006
+        if (blobId.getSegmentId().equals(segment.getSegmentId())) {
+            return segment.readString(blobId.getRecordNumber());
+        } else {
+            return blobId.getSegment().readString(blobId.getRecordNumber());
+        }
     }
 
     private List<RecordId> getBulkRecordIds() {