Index: src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java (working copy) @@ -69,7 +69,7 @@ SegmentNodeState current = reader.readHeadState(revisions); try { int gen = 0; - gen = current.getRecordId().getSegment().getGcGeneration(); + gen = current.getRecordId().getSegmentId().getGcGeneration(); SegmentBufferWriter bufferWriter = new SegmentBufferWriter( backup, backup.getTracker(), Index: src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java (working copy) @@ -61,7 +61,7 @@ SegmentNodeState current = store.getHead(); try { SegmentNodeState head = restore.getHead(); - int gen = head.getRecordId().getSegment().getGcGeneration(); + int gen = head.getRecordId().getSegmentId().getGcGeneration(); SegmentBufferWriter bufferWriter = new SegmentBufferWriter( store, store.getTracker(), Index: src/main/java/org/apache/jackrabbit/oak/segment/Segment.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/segment/Segment.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/segment/Segment.java (working copy) @@ -289,7 +289,7 @@ * generations (i.e. stay at 0). * @return the gc generation of this segment or 0 if this is bulk segment. */ - public int getGcGeneration() { + int getGcGeneration() { return getGcGeneration(data, id.asUUID()); } Index: src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java (working copy) @@ -302,7 +302,7 @@ if (!DISABLE_GENERATION_CHECK) { try { if (isDataSegmentId(id.getLeastSignificantBits())) { - if (id.getSegment().getGcGeneration() < generation) { + if (id.getGcGeneration() < generation) { LOG.warn("Detected reference from {} to segment {} from a previous gc generation.", info(this.segment), info(id.getSegment()), new Exception()); } Index: src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java (working copy) @@ -538,9 +538,10 @@ tokenizer.read('{'); infoMap.putAll(JsonObject.create(tokenizer).getProperties()); } - Segment segment = getSegmentId().getSegment(); + SegmentId segmentId = getSegmentId(); + Segment segment = segmentId.getSegment(); infoMap.put("size", valueOf(segment.size())); - infoMap.put("gc", valueOf(segment.getGcGeneration())); + infoMap.put("gc", valueOf(segmentId.getGcGeneration())); return infoMap; } catch (SegmentNotFoundException e) { return singletonMap("error", getStackTraceAsString(e)); Index: src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java (working copy) @@ -172,6 +172,7 @@ */ void loaded(@Nonnull Segment segment) { this.segment = segment; + this.gcGeneration = segment.getGcGeneration(); } /** @@ -204,6 +205,13 @@ return new UUID(msb, lsb); } + public int getGcGeneration() { + if (gcGeneration < 0) { + getSegment(); + } + return gcGeneration; + } + // --------------------------------------------------------< Comparable >-- @Override Index: src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java (working copy) @@ -1196,7 +1196,7 @@ private boolean isOldGeneration(RecordId id) { try { - int thatGen = id.getSegment().getGcGeneration(); + int thatGen = id.getSegmentId().getGcGeneration(); int thisGen = writer.getGeneration(); return thatGen < thisGen; } catch (SegmentNotFoundException snfe) { Index: src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (revision 1759761) +++ src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (working copy) @@ -465,7 +465,7 @@ } private int getGcGeneration() { - return revisions.getHead().getSegment().getGcGeneration(); + return revisions.getHead().getSegmentId().getGcGeneration(); } @Nonnull