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