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 md...@apache.org on 2017/03/01 17:25:34 UTC

svn commit: r1784993 - in /jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment: SegmentTracker.java file/AbstractFileStore.java memory/MemoryStore.java

Author: mduerig
Date: Wed Mar  1 17:25:34 2017
New Revision: 1784993

URL: http://svn.apache.org/viewvc?rev=1784993&view=rev
Log:
OAK-3690: Decouple SegmentBufferWriter from SegmentStore
Pass the SegmentIdFactor to the SegmentTracker constructor instead of having to pass it with every call to one of the newSegmentId methods

Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentTracker.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentTracker.java?rev=1784993&r1=1784992&r2=1784993&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentTracker.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentTracker.java Wed Mar  1 17:25:34 2017
@@ -18,6 +18,7 @@
  */
 package org.apache.jackrabbit.oak.segment;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Sets.newHashSet;
 
 import java.security.SecureRandom;
@@ -69,7 +70,11 @@ public class SegmentTracker {
     @Nonnull
     private final AtomicInteger segmentCounter = new AtomicInteger();
 
-    public SegmentTracker() {
+    @Nonnull
+    private final SegmentIdFactory segmentIdFactory;
+
+    public SegmentTracker(@Nonnull SegmentIdFactory segmentIdFactory) {
+        this.segmentIdFactory = checkNotNull(segmentIdFactory);
         for (int i = 0; i < tables.length; i++) {
             tables[i] = new SegmentIdTable();
         }
@@ -107,43 +112,40 @@ public class SegmentTracker {
      *
      * @param msb   most significant bits of the segment id
      * @param lsb   least  significant bits of the segment id
-     * @param maker A non-{@code null} instance of {@link SegmentIdFactory}.
      * @return the segment id
      */
     @Nonnull
-    public SegmentId newSegmentId(long msb, long lsb, SegmentIdFactory maker) {
+    public SegmentId newSegmentId(long msb, long lsb) {
         int index = ((int) msb) & (tables.length - 1);
-        return tables[index].newSegmentId(msb, lsb, maker);
+        return tables[index].newSegmentId(msb, lsb, segmentIdFactory);
     }
 
     /**
      * Create and track a new segment id for data segments.
      *
-     * @param maker A non-{@code null} instance of {@link SegmentIdFactory}.
      * @return the segment id
      */
     @Nonnull
-    public SegmentId newDataSegmentId(SegmentIdFactory maker) {
-        return newSegmentId(DATA, maker);
+    public SegmentId newDataSegmentId() {
+        return newSegmentId(DATA);
     }
 
     /**
      * Create and track a new segment id for bulk segments.
      *
-     * @param maker A non-{@code null} instance of {@link SegmentIdFactory}.
      * @return the segment id
      */
     @Nonnull
-    public SegmentId newBulkSegmentId(SegmentIdFactory maker) {
-        return newSegmentId(BULK, maker);
+    public SegmentId newBulkSegmentId() {
+        return newSegmentId(BULK);
     }
 
     @Nonnull
-    private SegmentId newSegmentId(long type, SegmentIdFactory maker) {
+    private SegmentId newSegmentId(long type) {
         segmentCounter.incrementAndGet();
         long msb = (random.nextLong() & MSB_MASK) | VERSION;
         long lsb = (random.nextLong() & LSB_MASK) | type;
-        return newSegmentId(msb, lsb, maker);
+        return newSegmentId(msb, lsb);
     }
 
     public synchronized void clearSegmentIdTables(@Nonnull Set<UUID> reclaimed, @Nonnull String gcInfo) {

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java?rev=1784993&r1=1784992&r2=1784993&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java Wed Mar  1 17:25:34 2017
@@ -104,22 +104,16 @@ public abstract class AbstractFileStore
 
     };
 
-    @Nonnull
-    private final SegmentIdFactory segmentIdFactory = new SegmentIdFactory() {
-
-        @Override
-        @Nonnull
-        public SegmentId newSegmentId(long msb, long lsb) {
-            return new SegmentId(AbstractFileStore.this, msb, lsb);
-        }
-
-    };
-
     protected final IOMonitor ioMonitor;
 
     AbstractFileStore(final FileStoreBuilder builder) {
         this.directory = builder.getDirectory();
-        this.tracker = new SegmentTracker();
+        this.tracker = new SegmentTracker(new SegmentIdFactory() {
+            @Override @Nonnull
+            public SegmentId newSegmentId(long msb, long lsb) {
+                return new SegmentId(AbstractFileStore.this, msb, lsb);
+            }
+        });
         this.blobStore = builder.getBlobStore();
         this.segmentCache = new SegmentCache(builder.getSegmentCacheSize());
         this.segmentReader = new CachingSegmentReader(new Supplier<SegmentWriter>() {
@@ -250,19 +244,19 @@ public abstract class AbstractFileStore
     @Override
     @Nonnull
     public SegmentId newSegmentId(long msb, long lsb) {
-        return tracker.newSegmentId(msb, lsb, segmentIdFactory);
+        return tracker.newSegmentId(msb, lsb);
     }
 
     @Override
     @Nonnull
     public SegmentId newBulkSegmentId() {
-        return tracker.newBulkSegmentId(segmentIdFactory);
+        return tracker.newBulkSegmentId();
     }
 
     @Override
     @Nonnull
     public SegmentId newDataSegmentId() {
-        return tracker.newDataSegmentId(segmentIdFactory);
+        return tracker.newDataSegmentId();
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java?rev=1784993&r1=1784992&r2=1784993&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java Wed Mar  1 17:25:34 2017
@@ -47,7 +47,7 @@ import org.apache.jackrabbit.oak.spi.blo
 public class MemoryStore implements SegmentStore {
 
     @Nonnull
-    private final SegmentTracker tracker = new SegmentTracker();
+    private final SegmentTracker tracker;
 
     @Nonnull
     private final MemoryStoreRevisions revisions;
@@ -58,20 +58,16 @@ public class MemoryStore implements Segm
     @Nonnull
     private final SegmentWriter segmentWriter;
 
-    private final SegmentIdFactory segmentIdFactory = new SegmentIdFactory() {
-
-        @Override
-        @Nonnull
-        public SegmentId newSegmentId(long msb, long lsb) {
-            return new SegmentId(MemoryStore.this, msb, lsb);
-        }
-
-    };
-
     private final ConcurrentMap<SegmentId, Segment> segments =
             Maps.newConcurrentMap();
 
     public MemoryStore() throws IOException {
+        this.tracker = new SegmentTracker(new SegmentIdFactory() {
+            @Override @Nonnull
+            public SegmentId newSegmentId(long msb, long lsb) {
+                return new SegmentId(MemoryStore.this, msb, lsb);
+            }
+        });
         this.revisions = new MemoryStoreRevisions();
         Supplier<SegmentWriter> getWriter = new Supplier<SegmentWriter>() {
             @Override
@@ -122,19 +118,19 @@ public class MemoryStore implements Segm
     @Override
     @Nonnull
     public SegmentId newSegmentId(long msb, long lsb) {
-        return tracker.newSegmentId(msb, lsb, segmentIdFactory);
+        return tracker.newSegmentId(msb, lsb);
     }
 
     @Override
     @Nonnull
     public SegmentId newBulkSegmentId() {
-        return tracker.newBulkSegmentId(segmentIdFactory);
+        return tracker.newBulkSegmentId();
     }
 
     @Override
     @Nonnull
     public SegmentId newDataSegmentId() {
-        return tracker.newDataSegmentId(segmentIdFactory);
+        return tracker.newDataSegmentId();
     }
 
     @Override