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:51 UTC
svn commit: r1784995 - in /jackrabbit/oak/trunk/oak-segment-tar/src:
main/java/org/apache/jackrabbit/oak/backup/impl/
main/java/org/apache/jackrabbit/oak/segment/
main/java/org/apache/jackrabbit/oak/segment/file/
main/java/org/apache/jackrabbit/oak/seg...
Author: mduerig
Date: Wed Mar 1 17:25:51 2017
New Revision: 1784995
URL: http://svn.apache.org/viewvc?rev=1784995&view=rev
Log:
OAK-3690: Decouple SegmentBufferWriter from SegmentStore
Remove new(Bulk|Data)SegmentId methods from SegmentStore and rely on the respective methods in the SegmentIdProvider instead
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.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/SegmentBufferWriterPool.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.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/SegmentWriterBuilder.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/file/FileStore.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightsTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableSegmentReferencesTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheStatsTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentIdFactoryTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentParserTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/TestUtils.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreBackupImpl.java Wed Mar 1 17:25:51 2017
@@ -69,6 +69,7 @@ public class FileStoreBackupImpl impleme
int gen = current.getRecordId().getSegmentId().getGcGeneration();
SegmentBufferWriter bufferWriter = new SegmentBufferWriter(
backup,
+ backup.getSegmentIdProvider(),
backup.getTracker().getSegmentCounter(),
backup.getReader(),
"b",
@@ -77,6 +78,7 @@ public class FileStoreBackupImpl impleme
SegmentWriter writer = new SegmentWriter(
backup,
backup.getReader(),
+ backup.getSegmentIdProvider(),
backup.getBlobStore(),
new WriterCacheManager.Default(),
bufferWriter
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/backup/impl/FileStoreRestoreImpl.java Wed Mar 1 17:25:51 2017
@@ -63,6 +63,7 @@ public class FileStoreRestoreImpl implem
int gen = head.getRecordId().getSegmentId().getGcGeneration();
SegmentBufferWriter bufferWriter = new SegmentBufferWriter(
store,
+ store.getSegmentIdProvider(),
store.getTracker().getSegmentCounter(),
store.getReader(),
"r",
@@ -71,6 +72,7 @@ public class FileStoreRestoreImpl implem
SegmentWriter writer = new SegmentWriter(
store,
store.getReader(),
+ store.getSegmentIdProvider(),
store.getBlobStore(),
new WriterCacheManager.Default(),
bufferWriter
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java Wed Mar 1 17:25:51 2017
@@ -140,7 +140,7 @@ public class Segment {
public static final int RECORD_NUMBER_COUNT_OFFSET = 18;
@Nonnull
- private final SegmentStore store;
+ private final SegmentIdProvider idProvider;
@Nonnull
private final SegmentReader reader;
@@ -179,11 +179,11 @@ public class Segment {
return (address + boundary - 1) & ~(boundary - 1);
}
- public Segment(@Nonnull SegmentStore store,
+ public Segment(@Nonnull SegmentIdProvider idProvider,
@Nonnull SegmentReader reader,
@Nonnull final SegmentId id,
@Nonnull final ByteBuffer data) {
- this.store = checkNotNull(store);
+ this.idProvider = checkNotNull(idProvider);
this.reader = checkNotNull(reader);
this.id = checkNotNull(id);
this.data = checkNotNull(data);
@@ -272,7 +272,7 @@ public class Segment {
int position = refOffset + (reference - 1) * SEGMENT_REFERENCE_SIZE;
long msb = data.getLong(position);
long lsb = data.getLong(position + 8);
- id = store.newSegmentId(msb, lsb);
+ id = idProvider.newSegmentId(msb, lsb);
refIds[reference - 1] = id;
}
}
@@ -298,16 +298,16 @@ public class Segment {
};
}
- Segment(@Nonnull SegmentStore store,
+ Segment(@Nonnull SegmentIdProvider idProvider,
@Nonnull SegmentReader reader,
@Nonnull byte[] buffer,
@Nonnull RecordNumbers recordNumbers,
@Nonnull SegmentReferences segmentReferences,
@Nonnull String info
) {
- this.store = checkNotNull(store);
+ this.idProvider = checkNotNull(idProvider);
this.reader = checkNotNull(reader);
- this.id = store.newDataSegmentId();
+ this.id = idProvider.newDataSegmentId();
this.info = checkNotNull(info);
this.data = ByteBuffer.wrap(checkNotNull(buffer));
this.version = SegmentVersion.fromByte(buffer[3]);
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=1784995&r1=1784994&r2=1784995&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 Wed Mar 1 17:25:51 2017
@@ -108,6 +108,9 @@ public class SegmentBufferWriter impleme
private final SegmentStore store;
@Nonnull
+ private final SegmentIdProvider idProvider;
+
+ @Nonnull
private final Supplier<Integer> segmentCounter;
@Nonnull
@@ -150,11 +153,13 @@ public class SegmentBufferWriter impleme
private boolean dirty;
public SegmentBufferWriter(@Nonnull SegmentStore store,
+ @Nonnull SegmentIdProvider idProvider,
@Nonnull Supplier<Integer> segmentCounter,
@Nonnull SegmentReader reader,
@CheckForNull String wid,
int generation) {
this.store = checkNotNull(store);
+ this.idProvider = checkNotNull(idProvider);
this.segmentCounter = checkNotNull(segmentCounter);
this.reader = checkNotNull(reader);
this.wid = (wid == null
@@ -211,7 +216,7 @@ public class SegmentBufferWriter impleme
",\"sno\":" + segmentCounter.get() +
",\"t\":" + currentTimeMillis() + "}";
try {
- segment = new Segment(store, reader, buffer, recordNumbers, segmentReferences, metaInfo);
+ segment = new Segment(idProvider, reader, buffer, recordNumbers, segmentReferences, metaInfo);
statistics = new Statistics();
statistics.id = segment.getSegmentId();
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferWriterPool.java Wed Mar 1 17:25:51 2017
@@ -192,6 +192,7 @@ public class SegmentBufferWriterPool imp
if (writer == null) {
writer = new SegmentBufferWriter(
store,
+ tracker,
tracker.getSegmentCounter(),
reader,
getWriterId(wid),
@@ -201,6 +202,7 @@ public class SegmentBufferWriterPool imp
disposed.add(writer);
writer = new SegmentBufferWriter(
store,
+ tracker,
tracker.getSegmentCounter(),
reader,
getWriterId(wid),
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStore.java Wed Mar 1 17:25:51 2017
@@ -63,21 +63,4 @@ public interface SegmentStore {
*/
@Nonnull
SegmentId newSegmentId(long msb, long lsb);
-
- /**
- * Create a new {@link SegmentId} for a segment of type "bulk".
- *
- * @return A non-{@code null} instance of {@link SegmentId}.
- */
- @Nonnull
- SegmentId newBulkSegmentId();
-
- /**
- * Create a new {@link SegmentId} for a segment of type "data".
- *
- * @return A non-{@code null} instance of {@link SegmentId}.
- */
- @Nonnull
- SegmentId newDataSegmentId();
-
}
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=1784995&r1=1784994&r2=1784995&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 Wed Mar 1 17:25:51 2017
@@ -96,6 +96,9 @@ public class SegmentWriter {
@Nonnull
private final SegmentReader reader;
+ @Nonnull
+ private final SegmentIdProvider idProvider;
+
@CheckForNull
private final BlobStore blobStore;
@@ -111,6 +114,7 @@ public class SegmentWriter {
*
* @param store store to write to
* @param reader segment reader for the {@code store}
+ * @param idProvider segment id provider for the {@code store}
* @param blobStore the blog store or {@code null} for inlined blobs
* @param cacheManager cache manager instance for the de-duplication caches used by this writer
* @param writeOperationHandler handler for write operations.
@@ -118,12 +122,14 @@ public class SegmentWriter {
public SegmentWriter(
@Nonnull SegmentStore store,
@Nonnull SegmentReader reader,
+ @Nonnull SegmentIdProvider idProvider,
@Nullable BlobStore blobStore,
@Nonnull WriterCacheManager cacheManager,
@Nonnull WriteOperationHandler writeOperationHandler
) {
this.store = checkNotNull(store);
this.reader = checkNotNull(reader);
+ this.idProvider = checkNotNull(idProvider);
this.blobStore = blobStore;
this.cacheManager = checkNotNull(cacheManager);
this.writeOperationHandler = checkNotNull(writeOperationHandler);
@@ -702,7 +708,7 @@ public class SegmentWriter {
// write as many full bulk segments as possible
while (pos + Segment.MAX_SEGMENT_SIZE <= data.length) {
- SegmentId bulkId = store.newBulkSegmentId();
+ SegmentId bulkId = idProvider.newBulkSegmentId();
store.writeSegment(bulkId, data, pos, Segment.MAX_SEGMENT_SIZE);
for (int i = 0; i < Segment.MAX_SEGMENT_SIZE; i += BLOCK_SIZE) {
blockIds.add(new RecordId(bulkId, i));
@@ -837,7 +843,7 @@ public class SegmentWriter {
// Write the data to bulk segments and collect the list of block ids
while (n != 0) {
- SegmentId bulkId = store.newBulkSegmentId();
+ SegmentId bulkId = idProvider.newBulkSegmentId();
LOG.debug("Writing bulk segment {} ({} bytes)", bulkId, n);
store.writeSegment(bulkId, data, 0, n);
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterBuilder.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriterBuilder.java Wed Mar 1 17:25:51 2017
@@ -146,6 +146,7 @@ public final class SegmentWriterBuilder
return new SegmentWriter(
checkNotNull(store),
store.getReader(),
+ store.getSegmentIdProvider(),
store.getBlobStore(),
cacheManager,
createWriter(store, pooled)
@@ -162,6 +163,7 @@ public final class SegmentWriterBuilder
return new SegmentWriter(
checkNotNull(store),
store.getReader(),
+ store.getSegmentIdProvider(),
store.getBlobStore(),
cacheManager,
new WriteOperationHandler() {
@@ -186,6 +188,7 @@ public final class SegmentWriterBuilder
return new SegmentWriter(
checkNotNull(store),
store.getReader(),
+ store.getSegmentIdProvider(),
store.getBlobStore(),
cacheManager,
createWriter(store, pooled)
@@ -205,6 +208,7 @@ public final class SegmentWriterBuilder
} else {
return new SegmentBufferWriter(
store,
+ store.getSegmentIdProvider(),
store.getTracker().getSegmentCounter(),
store.getReader(),
name,
@@ -226,6 +230,7 @@ public final class SegmentWriterBuilder
} else {
return new SegmentBufferWriter(
store,
+ store.getSegmentIdProvider(),
store.getTracker().getSegmentCounter(),
store.getReader(),
name,
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=1784995&r1=1784994&r2=1784995&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:51 2017
@@ -44,6 +44,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.SegmentCache;
import org.apache.jackrabbit.oak.segment.SegmentId;
import org.apache.jackrabbit.oak.segment.SegmentIdFactory;
+import org.apache.jackrabbit.oak.segment.SegmentIdProvider;
import org.apache.jackrabbit.oak.segment.SegmentNodeState;
import org.apache.jackrabbit.oak.segment.SegmentReader;
import org.apache.jackrabbit.oak.segment.SegmentStore;
@@ -223,6 +224,11 @@ public abstract class AbstractFileStore
return segmentReader;
}
+ @Nonnull
+ public SegmentIdProvider getSegmentIdProvider() {
+ return tracker;
+ }
+
/**
* @return the {@link Revisions} object bound to the current store.
*/
@@ -247,18 +253,6 @@ public abstract class AbstractFileStore
return tracker.newSegmentId(msb, lsb);
}
- @Override
- @Nonnull
- public SegmentId newBulkSegmentId() {
- return tracker.newBulkSegmentId();
- }
-
- @Override
- @Nonnull
- public SegmentId newDataSegmentId() {
- return tracker.newDataSegmentId();
- }
-
/**
* @return the external BlobStore (if configured) with this store, {@code null} otherwise.
*/
@@ -274,7 +268,7 @@ public abstract class AbstractFileStore
int generation = Segment.getGcGeneration(buffer, id);
w.writeEntry(msb, lsb, data, 0, data.length, generation);
if (SegmentId.isDataSegmentId(lsb)) {
- Segment segment = new Segment(this, segmentReader, newSegmentId(msb, lsb), buffer);
+ Segment segment = new Segment(tracker, segmentReader, newSegmentId(msb, lsb), buffer);
populateTarGraph(segment, w);
populateTarBinaryReferences(segment, w);
}
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=1784995&r1=1784994&r2=1784995&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 Wed Mar 1 17:25:51 2017
@@ -530,7 +530,7 @@ public class FileStore extends AbstractF
public Segment call() throws Exception {
ByteBuffer buffer = FileStoreUtil.readEntry(readers, id);
if (buffer != null) {
- return new Segment(FileStore.this, segmentReader, id, buffer);
+ return new Segment(tracker, segmentReader, id, buffer);
}
if (tarWriter != null) {
@@ -539,7 +539,7 @@ public class FileStore extends AbstractF
try {
buffer = tarWriter.readEntry(id.getMostSignificantBits(), id.getLeastSignificantBits());
if (buffer != null) {
- return new Segment(FileStore.this, segmentReader, id, buffer);
+ return new Segment(tracker, segmentReader, id, buffer);
}
} catch (IOException e) {
log.warn("Failed to read from tar file {}", tarWriter, e);
@@ -556,7 +556,7 @@ public class FileStore extends AbstractF
buffer = FileStoreUtil.readEntry(readers, id);
if (buffer != null) {
- return new Segment(FileStore.this, segmentReader, id, buffer);
+ return new Segment(tracker, segmentReader, id, buffer);
}
throw new SegmentNotFoundException(id);
@@ -596,7 +596,7 @@ public class FileStore extends AbstractF
data = ByteBuffer.wrap(buffer, offset, length);
}
- segment = new Segment(this, segmentReader, id, data);
+ segment = new Segment(tracker, segmentReader, id, data);
generation = segment.getGcGeneration();
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/ReadOnlyFileStore.java Wed Mar 1 17:25:51 2017
@@ -173,7 +173,7 @@ public class ReadOnlyFileStore extends A
if (buffer == null) {
throw new SegmentNotFoundException(id);
}
- return new Segment(ReadOnlyFileStore.this, segmentReader, id, buffer);
+ return new Segment(tracker, segmentReader, id, buffer);
}
});
} catch (ExecutionException e) {
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=1784995&r1=1784994&r2=1784995&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:51 2017
@@ -22,6 +22,7 @@ import static org.apache.jackrabbit.oak.
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import javax.annotation.CheckForNull;
@@ -34,6 +35,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.Segment;
import org.apache.jackrabbit.oak.segment.SegmentId;
import org.apache.jackrabbit.oak.segment.SegmentIdFactory;
+import org.apache.jackrabbit.oak.segment.SegmentIdProvider;
import org.apache.jackrabbit.oak.segment.SegmentNotFoundException;
import org.apache.jackrabbit.oak.segment.SegmentReader;
import org.apache.jackrabbit.oak.segment.SegmentStore;
@@ -97,6 +99,11 @@ public class MemoryStore implements Segm
}
@Nonnull
+ public SegmentIdProvider getSegmentIdProvider() {
+ return tracker;
+ }
+
+ @Nonnull
public Revisions getRevisions() {
return revisions;
}
@@ -122,24 +129,12 @@ public class MemoryStore implements Segm
}
@Override
- @Nonnull
- public SegmentId newBulkSegmentId() {
- return tracker.newBulkSegmentId();
- }
-
- @Override
- @Nonnull
- public SegmentId newDataSegmentId() {
- return tracker.newDataSegmentId();
- }
-
- @Override
public void writeSegment(
SegmentId id, byte[] data, int offset, int length) throws IOException {
ByteBuffer buffer = ByteBuffer.allocate(length);
buffer.put(data, offset, length);
buffer.rewind();
- Segment segment = new Segment(this, segmentReader, id, buffer);
+ Segment segment = new Segment(tracker, segmentReader, id, buffer);
if (segments.putIfAbsent(id, segment) != null) {
throw new IOException("Segment override: " + id);
}
@@ -158,4 +153,7 @@ public class MemoryStore implements Segm
segments.keySet().retainAll(tracker.getReferencedSegmentIds());
}
+ public Set<SegmentId> getReferencedSegmentIds() {
+ return tracker.getReferencedSegmentIds();
+ }
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightsTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightsTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightsTest.java Wed Mar 1 17:25:51 2017
@@ -386,7 +386,7 @@ public class CacheWeightsTest {
ByteBuffer data = ByteBuffer.wrap(buffer);
SegmentId id = randomSegmentId(false);
- Segment segment = new Segment(store, store.getReader(), id, data);
+ Segment segment = new Segment(store.getSegmentIdProvider(), store.getReader(), id, data);
//
// TODO check impact of MutableRecordNumbers overhead of 65k bytes
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableSegmentReferencesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableSegmentReferencesTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableSegmentReferencesTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MutableSegmentReferencesTest.java Wed Mar 1 17:25:51 2017
@@ -32,8 +32,8 @@ public class MutableSegmentReferencesTes
@Test
public void referencesShouldBeGreaterThanZero() throws Exception {
- SegmentStore store = new MemoryStore();
- SegmentId id = store.newDataSegmentId();
+ MemoryStore store = new MemoryStore();
+ SegmentId id = store.getSegmentIdProvider().newDataSegmentId();
MutableSegmentReferences table = new MutableSegmentReferences();
int reference = table.addOrReference(id);
@@ -42,9 +42,9 @@ public class MutableSegmentReferencesTes
@Test
public void referencesShouldBeIncrementing() throws Exception {
- SegmentStore store = new MemoryStore();
- SegmentId first = store.newDataSegmentId();
- SegmentId second = store.newDataSegmentId();
+ MemoryStore store = new MemoryStore();
+ SegmentId first = store.getSegmentIdProvider().newDataSegmentId();
+ SegmentId second = store.getSegmentIdProvider().newDataSegmentId();
MutableSegmentReferences table = new MutableSegmentReferences();
int firstReference = table.addOrReference(first);
@@ -54,8 +54,8 @@ public class MutableSegmentReferencesTes
@Test
public void shouldAddNewSegmentReference() throws Exception {
- SegmentStore store = new MemoryStore();
- SegmentId id = store.newDataSegmentId();
+ MemoryStore store = new MemoryStore();
+ SegmentId id = store.getSegmentIdProvider().newDataSegmentId();
MutableSegmentReferences table = new MutableSegmentReferences();
int reference = table.addOrReference(id);
@@ -64,8 +64,8 @@ public class MutableSegmentReferencesTes
@Test
public void shouldNotAddSameSegmentIdTwice() throws Exception {
- SegmentStore store = new MemoryStore();
- SegmentId id = store.newDataSegmentId();
+ MemoryStore store = new MemoryStore();
+ SegmentId id = store.getSegmentIdProvider().newDataSegmentId();
MutableSegmentReferences table = new MutableSegmentReferences();
int first = table.addOrReference(id);
@@ -75,8 +75,8 @@ public class MutableSegmentReferencesTes
@Test
public void shouldMaintainSize() throws Exception {
- SegmentStore store = new MemoryStore();
- SegmentId id = store.newDataSegmentId();
+ MemoryStore store = new MemoryStore();
+ SegmentId id = store.getSegmentIdProvider().newDataSegmentId();
MutableSegmentReferences table = new MutableSegmentReferences();
assertEquals(0, table.size());
@@ -86,8 +86,8 @@ public class MutableSegmentReferencesTes
@Test
public void shouldContainAddedSegment() throws Exception {
- SegmentStore store = new MemoryStore();
- SegmentId id = store.newDataSegmentId();
+ MemoryStore store = new MemoryStore();
+ SegmentId id = store.getSegmentIdProvider().newDataSegmentId();
MutableSegmentReferences table = new MutableSegmentReferences();
assertFalse(table.contains(id));
@@ -97,9 +97,9 @@ public class MutableSegmentReferencesTes
@Test
public void shouldIterateInInsertionOrder() throws Exception {
- SegmentStore store = new MemoryStore();
- SegmentId first = store.newDataSegmentId();
- SegmentId second = store.newDataSegmentId();
+ MemoryStore store = new MemoryStore();
+ SegmentId first = store.getSegmentIdProvider().newDataSegmentId();
+ SegmentId second = store.getSegmentIdProvider().newDataSegmentId();
List<SegmentId> ids = newArrayList(first, second);
MutableSegmentReferences table = new MutableSegmentReferences();
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheStatsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheStatsTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheStatsTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheStatsTest.java Wed Mar 1 17:25:51 2017
@@ -55,7 +55,7 @@ public class RecordCacheStatsTest {
public RecordCacheStatsTest() throws IOException {}
private RecordId newRecordId() {
- return TestUtils.newRecordId(store, rnd);
+ return TestUtils.newRecordId(store.getSegmentIdProvider(), rnd);
}
@Before
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordCacheTest.java Wed Mar 1 17:25:51 2017
@@ -36,6 +36,7 @@ import org.junit.Test;
public class RecordCacheTest {
private final Random rnd = new Random();
private final MemoryStore store = new MemoryStore();
+ private final SegmentIdProvider idProvider = store.getSegmentIdProvider();
public RecordCacheTest() throws IOException {}
@@ -44,7 +45,7 @@ public class RecordCacheTest {
RecordCache<String> cache = newRecordCache(0);
assertNull(cache.get("any"));
- cache.put("key", (newRecordId(store, rnd)));
+ cache.put("key", (newRecordId(idProvider, rnd)));
assertNull(cache.get("key"));
}
@@ -53,7 +54,7 @@ public class RecordCacheTest {
RecordCache<String> cache = newRecordCache(10);
assertNull(cache.get("any"));
- RecordId value = newRecordId(store, rnd);
+ RecordId value = newRecordId(idProvider, rnd);
cache.put("key", value);
assertEquals(value, cache.get("key"));
}
@@ -64,7 +65,7 @@ public class RecordCacheTest {
Map<String, RecordId> keys = newLinkedHashMap();
for (int k = 0; k < 10; k ++) {
String key = "key-" + k;
- RecordId value = newRecordId(store, rnd);
+ RecordId value = newRecordId(idProvider, rnd);
keys.put(key, value);
cache.put(key, value);
}
@@ -74,7 +75,7 @@ public class RecordCacheTest {
entry.getValue(), cache.get(entry.getKey()));
}
- RecordId value = newRecordId(store, rnd);
+ RecordId value = newRecordId(idProvider, rnd);
// This should invalidate "key-0", which is the least recently accessed key
cache.put("key", value);
keys.put("key", value);
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordTest.java Wed Mar 1 17:25:51 2017
@@ -152,7 +152,7 @@ public class RecordTest {
public void testListWithLotsOfReferences() throws IOException { // OAK-1184
List<RecordId> list = newArrayList();
for (int i = 0; i < 1000; i++) {
- list.add(new RecordId(store.newBulkSegmentId(), 0));
+ list.add(new RecordId(store.getSegmentIdProvider().newBulkSegmentId(), 0));
}
writer.writeList(list);
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentIdFactoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentIdFactoryTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentIdFactoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentIdFactoryTest.java Wed Mar 1 17:25:51 2017
@@ -18,11 +18,10 @@
*/
package org.apache.jackrabbit.oak.segment;
-import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
import java.io.IOException;
-import java.nio.ByteBuffer;
import java.util.Set;
import org.apache.jackrabbit.oak.segment.memory.MemoryStore;
@@ -30,20 +29,20 @@ import org.junit.Test;
public class SegmentIdFactoryTest {
private final MemoryStore store;
- private final SegmentTracker tracker;
+ private final SegmentIdProvider idProvider;
public SegmentIdFactoryTest() throws IOException {
store = new MemoryStore();
- tracker = store.getTracker();
+ idProvider = store.getSegmentIdProvider();
}
@Test
public void segmentIdType() {
- assertTrue(store.newDataSegmentId().isDataSegmentId());
- assertTrue(store.newBulkSegmentId().isBulkSegmentId());
+ assertTrue(idProvider.newDataSegmentId().isDataSegmentId());
+ assertTrue(idProvider.newBulkSegmentId().isBulkSegmentId());
- assertFalse(store.newDataSegmentId().isBulkSegmentId());
- assertFalse(store.newBulkSegmentId().isDataSegmentId());
+ assertFalse(idProvider.newDataSegmentId().isBulkSegmentId());
+ assertFalse(idProvider.newBulkSegmentId().isDataSegmentId());
}
@Test
@@ -55,17 +54,17 @@ public class SegmentIdFactoryTest {
@Test
public void referencedSegmentIds() throws InterruptedException {
- SegmentId a = store.newDataSegmentId();
- SegmentId b = store.newBulkSegmentId();
- SegmentId c = store.newDataSegmentId();
+ SegmentId a = idProvider.newDataSegmentId();
+ SegmentId b = idProvider.newBulkSegmentId();
+ SegmentId c = idProvider.newDataSegmentId();
- Set<SegmentId> ids = tracker.getReferencedSegmentIds();
+ Set<SegmentId> ids = store.getReferencedSegmentIds();
assertTrue(ids.contains(a));
assertTrue(ids.contains(b));
assertTrue(ids.contains(c));
// the returned set is a snapshot in time, not continuously updated
- assertFalse(ids.contains(store.newBulkSegmentId()));
+ assertFalse(ids.contains(idProvider.newBulkSegmentId()));
}
/**
@@ -73,10 +72,9 @@ public class SegmentIdFactoryTest {
* weak for this to work reliably. But it's a good manual check for
* the correct operation of the tracking of segment id references.
*/
- // @Test
public void garbageCollection() {
- SegmentId a = store.newDataSegmentId();
- SegmentId b = store.newBulkSegmentId();
+ SegmentId a = idProvider.newDataSegmentId();
+ SegmentId b = idProvider.newBulkSegmentId();
// generate lots of garbage copies of an UUID to get the
// garbage collector to reclaim also the original instance
@@ -87,7 +85,7 @@ public class SegmentIdFactoryTest {
System.gc();
// now the original UUID should no longer be present
- Set<SegmentId> ids = tracker.getReferencedSegmentIds();
+ Set<SegmentId> ids = store.getReferencedSegmentIds();
assertFalse(ids.contains(a));
assertTrue(ids.contains(b));
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentParserTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentParserTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentParserTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentParserTest.java Wed Mar 1 17:25:51 2017
@@ -42,7 +42,6 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Random;
-import java.util.concurrent.atomic.AtomicInteger;
import com.google.common.collect.ImmutableList;
import org.apache.jackrabbit.oak.api.Blob;
@@ -56,7 +55,6 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.memory.MemoryStore;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
public class SegmentParserTest {
@@ -381,7 +379,7 @@ public class SegmentParserTest {
@Test
public void emptyList() {
- RecordId listId = newRecordId(store, new Random());
+ RecordId listId = newRecordId(store.getSegmentIdProvider(), new Random());
ListInfo listInfo = new TestParser(store.getReader(), "emptyList").parseList(null, listId, 0);
assertEquals(listId, listInfo.listId);
assertEquals(0, listInfo.count);
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/TestUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/TestUtils.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/TestUtils.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/TestUtils.java Wed Mar 1 17:25:51 2017
@@ -32,8 +32,8 @@ import javax.annotation.Nonnull;
public final class TestUtils {
private TestUtils() {}
- public static RecordId newRecordId(SegmentStore store, Random random) {
- SegmentId id = store.newDataSegmentId();
+ public static RecordId newRecordId(SegmentIdProvider idProvider, Random random) {
+ SegmentId id = idProvider.newDataSegmentId();
RecordId r = new RecordId(id, newValidOffset(random));
return r;
}
@@ -56,22 +56,22 @@ public final class TestUtils {
* Create a random map of record ids.
*
* @param rnd
- * @param store
+ * @param idProvider
* @param segmentCount number of segments
* @param entriesPerSegment number of records per segment
* @return map of record ids
*/
- public static Map<RecordId, RecordId> randomRecordIdMap(Random rnd, SegmentStore store,
+ public static Map<RecordId, RecordId> randomRecordIdMap(Random rnd, SegmentIdProvider idProvider,
int segmentCount, int entriesPerSegment) {
Map<RecordId, RecordId> map = newHashMap();
for (int i = 0; i < segmentCount; i++) {
- SegmentId id = store.newDataSegmentId();
+ SegmentId id =idProvider.newDataSegmentId();
int offset = MAX_SEGMENT_SIZE;
for (int j = 0; j < entriesPerSegment; j++) {
offset = newValidOffset(rnd, (entriesPerSegment - j) << RECORD_ALIGN_BITS, offset);
RecordId before = new RecordId(id, offset);
RecordId after = new RecordId(
- store.newDataSegmentId(),
+ idProvider.newDataSegmentId(),
newValidOffset(rnd, 0, MAX_SEGMENT_SIZE));
map.put(before, after);
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/TarWriterTest.java Wed Mar 1 17:25:51 2017
@@ -177,7 +177,7 @@ public class TarWriterTest {
this.name = name;
this.selfId = selfId;
this.data = data.array();
- segment = new Segment(store, store.getReader(), selfId.getSegmentId(), data);
+ segment = new Segment(store.getSegmentIdProvider(), store.getReader(), selfId.getSegmentId(), data);
}
public void write(TarWriter tarWriter) throws IOException {
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java?rev=1784995&r1=1784994&r2=1784995&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java Wed Mar 1 17:25:51 2017
@@ -26,6 +26,7 @@ import com.google.common.hash.Hashing;
import org.apache.jackrabbit.oak.segment.RecordId;
import org.apache.jackrabbit.oak.segment.Segment;
import org.apache.jackrabbit.oak.segment.SegmentId;
+import org.apache.jackrabbit.oak.segment.SegmentIdProvider;
import org.apache.jackrabbit.oak.segment.SegmentReader;
import org.apache.jackrabbit.oak.segment.SegmentStore;
@@ -41,12 +42,13 @@ public class StandbyTestUtils {
public static Segment mockSegment(UUID uuid, byte[] buffer) {
SegmentStore store = mock(SegmentStore.class);
+ SegmentIdProvider idProvider = mock(SegmentIdProvider.class);
SegmentReader reader = mock(SegmentReader.class);
long msb = uuid.getMostSignificantBits();
long lsb = uuid.getLeastSignificantBits();
SegmentId id = new SegmentId(store, msb, lsb);
ByteBuffer data = ByteBuffer.wrap(buffer);
- return new Segment(store, reader, id, data);
+ return new Segment(idProvider, reader, id, data);
}
public static long hash(byte[] data) {