Author: alexparvulescu Date: Thu Sep 8 12:59:00 2016 New Revision: 1759807
URL: http://svn.apache.org/viewvc?rev=1759807&view=rev Log: OAK-4777 Use gc generation from SegmentId instead of the Segment itself Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java 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/backup/FileStoreBackup.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java?rev=1759807&r1=1759806&r2=1759807&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreBackup.java Thu Sep 8 12:59:00 2016 @@ -69,7 +69,7 @@ public class FileStoreBackup { 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(), Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java?rev=1759807&r1=1759806&r2=1759807&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/FileStoreRestore.java Thu Sep 8 12:59:00 2016 @@ -61,7 +61,7 @@ public class FileStoreRestore { 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(), Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java?rev=1759807&r1=1759806&r2=1759807&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriter.java Thu Sep 8 12:59:00 2016 @@ -302,7 +302,7 @@ public class SegmentBufferWriter impleme 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()); } Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java?rev=1759807&r1=1759806&r2=1759807&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentGraph.java Thu Sep 8 12:59:00 2016 @@ -538,9 +538,10 @@ public final class SegmentGraph { 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)); Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java?rev=1759807&r1=1759806&r2=1759807&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentId.java Thu Sep 8 12:59:00 2016 @@ -172,6 +172,7 @@ public class SegmentId implements Compar */ void loaded(@Nonnull Segment segment) { this.segment = segment; + this.gcGeneration = segment.getGcGeneration(); } /** @@ -204,6 +205,18 @@ public class SegmentId implements Compar return new UUID(msb, lsb); } + /** + * Get the underlying segment's gc generation. Might cause the segment to + * get loaded if the generation info is missing + * @return the segment's gc generation + */ + public int getGcGeneration() { + if (gcGeneration < 0) { + getSegment(); + } + return gcGeneration; + } + // --------------------------------------------------------< Comparable >-- @Override Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java?rev=1759807&r1=1759806&r2=1759807&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java (original) +++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java Thu Sep 8 12:59:00 2016 @@ -1196,7 +1196,7 @@ public class SegmentWriter { 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) { 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=1759807&r1=1759806&r2=1759807&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 Thu Sep 8 12:59:00 2016 @@ -466,7 +466,7 @@ public class FileStore implements Segmen } private int getGcGeneration() { - return revisions.getHead().getSegment().getGcGeneration(); + return revisions.getHead().getSegmentId().getGcGeneration(); } @Nonnull
