Author: adulceanu
Date: Tue Jan 29 09:39:54 2019
New Revision: 1852424
URL: http://svn.apache.org/viewvc?rev=1852424&view=rev
Log:
OAK-8006 - SegmentBlob#readLongBlobId might cause SegmentNotFoundException on
standby
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java?rev=1852424&r1=1852423&r2=1852424&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
Tue Jan 29 09:39:54 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() {