Index: oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java =================================================================== --- oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java (revision 1747522) +++ oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java (working copy) @@ -24,6 +24,7 @@ import java.security.SecureRandom; import java.util.Queue; import java.util.Set; +import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -289,20 +290,25 @@ */ public void collectBlobReferences(ReferenceCollector collector) { try { - Set processed = newHashSet(); - Queue queue = newArrayDeque(getReferencedSegmentIds()); + Set processed = newHashSet(); + for (SegmentId sid : getReferencedSegmentIds()) { + if (sid.isDataSegmentId()) { + processed.add(sid.asUUID()); + } + } + Queue queue = newArrayDeque(processed); writer.flush(); // force the current segment to have root record info while (!queue.isEmpty()) { - SegmentId id = queue.remove(); - if (id.isDataSegmentId() && processed.add(id)) { - Segment segment = id.getSegment(); - - segment.collectBlobReferences(collector); - - for (SegmentId refid : segment.getReferencedIds()) { - if (refid.isDataSegmentId() && !processed.contains(refid)) { - queue.add(refid); - } + UUID uid = queue.remove(); + SegmentId id = getSegmentId(uid.getMostSignificantBits(), + uid.getLeastSignificantBits()); + Segment segment = id.getSegment(); + segment.collectBlobReferences(collector); + for (SegmentId refid : segment.getReferencedIds()) { + UUID rid = refid.asUUID(); + if (refid.isDataSegmentId() && !processed.contains(rid)) { + queue.add(rid); + processed.add(rid); } } }