Author: frm
Date: Thu Jun 22 15:14:00 2017
New Revision: 1799590
URL: http://svn.apache.org/viewvc?rev=1799590&view=rev
Log:
OAK-6378 - Move the SegmentWriter API to its own interface
Added:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
- copied, changed from r1799589,
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/SegmentWriter.java
(with props)
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ExternalBlobReferenceTest.java
- copied, changed from r1799589,
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ExternalBlobReferenceTest.java
Removed:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/ExternalBlobReferenceTest.java
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/CachingSegmentReader.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Compactor.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.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/SegmentBlob.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/SegmentNodeBuilder.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.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/WriteOperationHandler.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.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/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStoreRevisions.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BlobIdRecordTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompareAgainstBaseStateTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/MapRecordTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.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/SegmentBufferWriterTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentGraphTest.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/SegmentReferencesTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/FileStoreIT.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/server/DefaultStandbyReferenceReaderTest.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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -30,11 +30,11 @@ import com.google.common.base.Stopwatch;
import com.google.common.base.Suppliers;
import org.apache.jackrabbit.oak.backup.FileStoreBackup;
import org.apache.jackrabbit.oak.segment.Compactor;
+import org.apache.jackrabbit.oak.segment.DefaultSegmentWriter;
import org.apache.jackrabbit.oak.segment.Revisions;
import org.apache.jackrabbit.oak.segment.SegmentBufferWriter;
import org.apache.jackrabbit.oak.segment.SegmentNodeState;
import org.apache.jackrabbit.oak.segment.SegmentReader;
-import org.apache.jackrabbit.oak.segment.SegmentWriter;
import org.apache.jackrabbit.oak.segment.WriterCacheManager;
import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
import org.apache.jackrabbit.oak.segment.file.FileStore;
@@ -73,7 +73,7 @@ public class FileStoreBackupImpl impleme
"b",
gen
);
- SegmentWriter writer = new SegmentWriter(
+ DefaultSegmentWriter writer = new DefaultSegmentWriter(
backup,
backup.getReader(),
backup.getSegmentIdProvider(),
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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -29,9 +29,9 @@ import com.google.common.base.Stopwatch;
import com.google.common.base.Suppliers;
import org.apache.jackrabbit.oak.backup.FileStoreRestore;
import org.apache.jackrabbit.oak.segment.Compactor;
+import org.apache.jackrabbit.oak.segment.DefaultSegmentWriter;
import org.apache.jackrabbit.oak.segment.SegmentBufferWriter;
import org.apache.jackrabbit.oak.segment.SegmentNodeState;
-import org.apache.jackrabbit.oak.segment.SegmentWriter;
import org.apache.jackrabbit.oak.segment.WriterCacheManager;
import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
import org.apache.jackrabbit.oak.segment.file.FileStore;
@@ -67,7 +67,7 @@ public class FileStoreRestoreImpl implem
"r",
gen
);
- SegmentWriter writer = new SegmentWriter(
+ DefaultSegmentWriter writer = new DefaultSegmentWriter(
store,
store.getReader(),
store.getSegmentIdProvider(),
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CachingSegmentReader.java
Thu Jun 22 15:14:00 2017
@@ -40,7 +40,7 @@ public class CachingSegmentReader implem
public static final int DEFAULT_TEMPLATE_CACHE_MB = 64;
@Nonnull
- private final Supplier<SegmentWriter> writer;
+ private final Supplier<DefaultSegmentWriter> writer;
@CheckForNull
private final BlobStore blobStore;
@@ -68,7 +68,7 @@ public class CachingSegmentReader implem
* @param templateCacheMB the size of the template cache in MBs or {@code
0} for no cache.
*/
public CachingSegmentReader(
- @Nonnull Supplier<SegmentWriter> writer,
+ @Nonnull Supplier<DefaultSegmentWriter> writer,
@Nullable BlobStore blobStore,
long stringCacheMB,
long templateCacheMB) {
@@ -123,7 +123,7 @@ public class CachingSegmentReader implem
@Nonnull
@Override
public SegmentNodeState readNode(@Nonnull RecordId id) {
- return new SegmentNodeState(this, writer, id);
+ return new SegmentNodeState(this, writer, blobStore, id);
}
@Nonnull
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Compactor.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Compactor.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Compactor.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Compactor.java
Thu Jun 22 15:14:00 2017
@@ -69,7 +69,7 @@ public class Compactor {
private final BlobStore blobStore;
- private final SegmentWriter writer;
+ private final DefaultSegmentWriter writer;
private final ProgressTracker progress = new ProgressTracker();
@@ -132,7 +132,7 @@ public class Compactor {
private final PriorityCache<RecordId, RecordId> nodeCache =
new PriorityCache<>((int) nextPowerOfTwo(cacheSize/10*9));
- public Compactor(SegmentReader reader, SegmentWriter writer,
+ public Compactor(SegmentReader reader, DefaultSegmentWriter writer,
BlobStore blobStore, Supplier<Boolean> cancel, SegmentGCOptions
gc) {
this.reader = reader;
this.writer = writer;
@@ -144,8 +144,8 @@ public class Compactor {
private SegmentNodeBuilder process(NodeState before, NodeState after,
NodeState onto) throws IOException {
- SegmentNodeBuilder builder = new SegmentNodeBuilder(
- writer.writeNode(onto), writer);
+ SegmentNodeState node = new SegmentNodeState(reader, writer,
blobStore, writer.writeNode(onto));
+ SegmentNodeBuilder builder = new SegmentNodeBuilder(node, blobStore,
reader, writer);
new CompactDiff(builder).diff(before, after);
return builder;
}
@@ -238,8 +238,7 @@ public class Compactor {
id = ((SegmentNodeState) after).getRecordId();
RecordId compactedId = nodeCache.get(id, 0);
if (compactedId != null) {
- builder.setChildNode(name, new SegmentNodeState(reader,
- writer, compactedId));
+ builder.setChildNode(name, new SegmentNodeState(reader,
writer, blobStore, compactedId));
return true;
}
}
@@ -250,12 +249,12 @@ public class Compactor {
if (eagerFlush) {
child = builder.setChildNode(name);
} else {
- child = writer.writeNode(EMPTY_NODE).builder();
+ child = new SegmentNodeState(reader, writer, blobStore,
writer.writeNode(EMPTY_NODE)).builder();
}
boolean success = new CompactDiff(child, path, name).diff(
EMPTY_NODE, after);
if (success) {
- SegmentNodeState state =
writer.writeNode(child.getNodeState());
+ SegmentNodeState state = new SegmentNodeState(reader,
writer, blobStore, writer.writeNode(child.getNodeState()));
builder.setChildNode(name, state);
if (id != null) {
nodeCache.put(id, state.getRecordId(), 0, cost(state));
@@ -280,8 +279,7 @@ public class Compactor {
id = ((SegmentNodeState) after).getRecordId();
RecordId compactedId = nodeCache.get(id, 0);
if (compactedId != null) {
- builder.setChildNode(name, new SegmentNodeState(reader,
- writer, compactedId));
+ builder.setChildNode(name, new SegmentNodeState(reader,
writer, blobStore, compactedId));
return true;
}
}
@@ -296,7 +294,7 @@ public class Compactor {
boolean success = new CompactDiff(child, path, name).diff(
before, after);
if (success) {
- SegmentNodeState state =
writer.writeNode(child.getNodeState());
+ SegmentNodeState state = new SegmentNodeState(reader,
writer, blobStore, writer.writeNode(child.getNodeState()));
if (id != null) {
nodeCache.put(id, state.getRecordId(), 0, cost(state));
}
@@ -365,11 +363,11 @@ public class Compactor {
// if the blob is external, just clone it
if (sb.isExternal()) {
- return writer.writeBlob(sb);
+ return new SegmentBlob(blobStore, writer.writeBlob(sb));
}
// if the blob is inlined, just clone it
if (sb.length() < Segment.MEDIUM_LIMIT) {
- SegmentBlob clone = writer.writeBlob(blob);
+ SegmentBlob clone = new SegmentBlob(blobStore,
writer.writeBlob(blob));
blobCache.put(id, clone.getRecordId(), 0, cost(clone));
return clone;
}
@@ -394,7 +392,7 @@ public class Compactor {
}
// if not, clone the large blob and keep track of the result
- sb = writer.writeBlob(blob);
+ sb = new SegmentBlob(blobStore, writer.writeBlob(blob));
blobCache.put(id, sb.getRecordId(), 0, cost(sb));
if (dedup) {
@@ -419,7 +417,7 @@ public class Compactor {
private static String getBlobKey(Blob blob) throws IOException {
InputStream stream = blob.getNewStream();
try {
- byte[] buffer = new byte[SegmentWriter.BLOCK_SIZE];
+ byte[] buffer = new byte[DefaultSegmentWriter.BLOCK_SIZE];
int n = IOUtils.readFully(stream, buffer, 0, buffer.length);
return blob.length() + ":" + Hashing.sha1().hashBytes(buffer, 0,
n);
} finally {
Copied:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java
(from r1799589,
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/DefaultSegmentWriter.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java&p1=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java&r1=1799589&r2=1799590&rev=1799590&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/DefaultSegmentWriter.java
Thu Jun 22 15:14:00 2017
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
+
package org.apache.jackrabbit.oak.segment;
import static com.google.common.base.Charsets.UTF_8;
@@ -79,13 +80,14 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * A {@code SegmentWriter} converts nodes, properties, values, etc. to records
and
- * persists them with the help of a {@link WriteOperationHandler}.
- * All public methods of this class are thread safe if and only if the
- * {@link WriteOperationHandler} passed to the constructor is thread safe.
+ * A {@code SegmentWriter} converts nodes, properties, values, etc. to records
+ * and persists them with the help of a {@link WriteOperationHandler}. All
+ * public methods of this class are thread safe if and only if the {@link
+ * WriteOperationHandler} passed to the constructor is thread safe.
*/
-public class SegmentWriter {
- private static final Logger LOG =
LoggerFactory.getLogger(SegmentWriter.class);
+public class DefaultSegmentWriter implements SegmentWriter {
+
+ private static final Logger LOG =
LoggerFactory.getLogger(org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.class);
static final int BLOCK_SIZE = 1 << 12; // 4kB
@@ -111,17 +113,19 @@ public class SegmentWriter {
private GCNodeWriteMonitor compactionMonitor = GCNodeWriteMonitor.EMPTY;
/**
- * Create a new instance of a {@code SegmentWriter}. Note the thread
safety properties
- * pointed out in the class comment.
+ * Create a new instance of a {@code SegmentWriter}. Note the thread safety
+ * properties pointed out in the class comment.
*
- * @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.
+ * @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.
*/
- public SegmentWriter(
+ public DefaultSegmentWriter(
@Nonnull SegmentStore store,
@Nonnull SegmentReader reader,
@Nonnull SegmentIdProvider idProvider,
@@ -137,41 +141,32 @@ public class SegmentWriter {
this.writeOperationHandler = checkNotNull(writeOperationHandler);
}
+ @Override
public void flush() throws IOException {
writeOperationHandler.flush(store);
}
- /**
- * Write a map record.
- * @param base base map relative to which the {@code changes} are
applied ot
- * {@code null} for the empty map.
- * @param changes the changed mapping to apply to the {@code base} map.
- * @return the map record written
- * @throws IOException
- */
+ @Override
@Nonnull
- public MapRecord writeMap(@Nullable final MapRecord base,
- @Nonnull final Map<String, RecordId> changes)
- throws IOException {
- RecordId mapId = writeOperationHandler.execute(new
SegmentWriteOperation() {
+ public RecordId writeMap(@Nullable final MapRecord base,
+ @Nonnull final Map<String, RecordId> changes
+ )
+ throws IOException {
+ return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
return with(writer).writeMap(base, changes);
}
});
- return new MapRecord(reader, mapId);
}
- /**
- * Write a list record.
- * @param list the list to write.
- * @return the record id of the list written
- * @throws IOException
- */
+ @Override
@Nonnull
public RecordId writeList(@Nonnull final List<RecordId> list) throws
IOException {
return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
@@ -180,15 +175,11 @@ public class SegmentWriter {
});
}
- /**
- * Write a string record.
- * @param string the string to write.
- * @return the record id of the string written.
- * @throws IOException
- */
+ @Override
@Nonnull
public RecordId writeString(@Nonnull final String string) throws
IOException {
return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
@@ -197,36 +188,25 @@ public class SegmentWriter {
});
}
- /**
- * Write a blob (as list of block records)
- * @param blob blob to write
- * @return The segment blob written
- * @throws IOException
- */
+ @Override
@Nonnull
- public SegmentBlob writeBlob(@Nonnull final Blob blob) throws IOException {
- RecordId blobId = writeOperationHandler.execute(new
SegmentWriteOperation() {
+ public RecordId writeBlob(@Nonnull final Blob blob) throws IOException {
+ return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
return with(writer).writeBlob(blob);
}
});
- return new SegmentBlob(blobStore, blobId);
}
- /**
- * Writes a block record containing the given block of bytes.
- *
- * @param bytes source buffer
- * @param offset offset within the source buffer
- * @param length number of bytes to write
- * @return block record identifier
- */
+ @Override
@Nonnull
public RecordId writeBlock(@Nonnull final byte[] bytes, final int offset,
final int length)
- throws IOException {
+ throws IOException {
return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
@@ -235,96 +215,58 @@ public class SegmentWriter {
});
}
- /**
- * Writes a stream value record. The given stream is consumed <em>and
closed</em> by
- * this method.
- *
- * @param stream stream to be written
- * @return blob for the passed {@code stream}
- * @throws IOException if the input stream could not be read or the output
could not be written
- */
+ @Override
@Nonnull
- public SegmentBlob writeStream(@Nonnull final InputStream stream) throws
IOException {
- RecordId blobId = writeOperationHandler.execute(new
SegmentWriteOperation() {
+ public RecordId writeStream(@Nonnull final InputStream stream) throws
IOException {
+ return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
return with(writer).writeStream(stream);
}
});
- return new SegmentBlob(blobStore, blobId);
}
- /**
- * Write a property.
- * @param state the property to write
- * @return the property state written
- * @throws IOException
- */
+ @Override
@Nonnull
- public SegmentPropertyState writeProperty(@Nonnull final PropertyState
state)
- throws IOException {
- RecordId id = writeOperationHandler.execute(new
SegmentWriteOperation() {
+ public RecordId writeProperty(@Nonnull final PropertyState state) throws
IOException {
+ return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
return with(writer).writeProperty(state);
}
});
- return new SegmentPropertyState(reader, id, state.getName(),
state.getType());
}
- /**
- * Write a node state.
- * <p>
- * <em>Note:</em> the returned {@code SegmentNodeState} instance is bound
to this
- * {@code SegmentWriter} instance. That is, future calls to {@code
#builder()}
- * return a {@code NodeBuilder} that is also bound to the same {@code
SegmentWriter}
- * instance and uses it for writing any changes. This might not always be
desired
- * and callers of this method need to take care not to proliferate this
writer
- * through the returned node states beyond the intended bounds.
- * @param state node state to write
- * @return segment node state equal to {@code state}
- * @throws IOException
- */
+ @Override
@Nonnull
- public SegmentNodeState writeNode(@Nonnull final NodeState state) throws
IOException {
- RecordId nodeId = writeOperationHandler.execute(new
SegmentWriteOperation() {
+ public RecordId writeNode(@Nonnull final NodeState state) throws
IOException {
+ return writeOperationHandler.execute(new SegmentWriteOperation() {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
return with(writer).writeNode(state);
}
});
- return new SegmentNodeState(reader, this, nodeId);
}
- /**
- * Write a node state, unless cancelled.
- * <p>
- * <em>Note:</em> the returned {@code SegmentNodeState} instance is bound
to this
- * {@code SegmentWriter} instance. That is, future calls to {@code
#builder()}
- * return a {@code NodeBuilder} that is also bound to the same {@code
SegmentWriter}
- * instance and uses it for writing any changes. This might not always be
desired
- * and callers of this method need to take care not to proliferate this
writer
- * through the returned node states beyond the intended bounds.
- * @param state node state to write
- * @param cancel supplier to signal cancellation of this write operation
- * @return segment node state equal to {@code state} or {@code null} if
cancelled.
- * @throws IOException
- */
+ @Override
@CheckForNull
- public SegmentNodeState writeNode(@Nonnull final NodeState state, @Nonnull
Supplier<Boolean> cancel)
- throws IOException {
+ public RecordId writeNode(@Nonnull final NodeState state, @Nonnull
Supplier<Boolean> cancel)
+ throws IOException {
try {
- RecordId nodeId = writeOperationHandler.execute(new
SegmentWriteOperation(cancel) {
+ return writeOperationHandler.execute(new
SegmentWriteOperation(cancel) {
+
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer)
throws IOException {
return with(writer, true).writeNode(state);
}
});
- return new SegmentNodeState(reader, this, nodeId);
} catch (SegmentWriteOperation.CancelledWriteException ignore) {
return null;
}
@@ -339,10 +281,11 @@ public class SegmentWriter {
private abstract class SegmentWriteOperation implements WriteOperation {
/**
- * This exception is used internally to signal cancellation of a
(recursive)
- * write node operation.
+ * This exception is used internally to signal cancellation of a
+ * (recursive) write node operation.
*/
private class CancelledWriteException extends IOException {
+
public CancelledWriteException() {
super("Cancelled write operation");
}
@@ -352,8 +295,11 @@ public class SegmentWriter {
private final Supplier<Boolean> cancel;
private SegmentBufferWriter writer;
+
private Cache<String, RecordId> stringCache;
+
private Cache<Template, RecordId> templateCache;
+
private Cache<String, RecordId> nodeCache;
protected SegmentWriteOperation(@Nonnull Supplier<Boolean> cancel) {
@@ -385,8 +331,9 @@ public class SegmentWriter {
}
private RecordId writeMap(@Nullable MapRecord base,
- @Nonnull Map<String, RecordId> changes)
- throws IOException {
+ @Nonnull Map<String, RecordId> changes
+ )
+ throws IOException {
if (base != null && base.isDiff()) {
Segment segment = base.getSegment();
RecordId key = segment.readRecordId(base.getRecordNumber(), 8);
@@ -399,7 +346,7 @@ public class SegmentWriter {
if (base != null && changes.size() == 1) {
Map.Entry<String, RecordId> change =
- changes.entrySet().iterator().next();
+ changes.entrySet().iterator().next();
RecordId value = change.getValue();
if (value != null) {
MapEntry entry = base.getEntry(change.getKey());
@@ -408,7 +355,7 @@ public class SegmentWriter {
return base.getRecordId();
} else {
return
RecordWriters.newMapBranchWriter(entry.getHash(), asList(entry.getKey(),
- value, base.getRecordId())).write(writer,
store);
+ value, base.getRecordId())).write(writer,
store);
}
}
}
@@ -474,7 +421,7 @@ public class SegmentWriter {
if (base == null) {
// use leaf records for small maps or the last map level
if (entries.size() <= BUCKETS_PER_LEVEL
- || level == MapRecord.MAX_NUMBER_OF_LEVELS) {
+ || level == MapRecord.MAX_NUMBER_OF_LEVELS) {
return writeMapLeaf(level, entries);
}
@@ -559,7 +506,7 @@ public class SegmentWriter {
while (thisLevel.size() > 1) {
List<RecordId> nextLevel = newArrayList();
for (List<RecordId> bucket :
- partition(thisLevel, ListRecord.LEVEL_SIZE)) {
+ partition(thisLevel, ListRecord.LEVEL_SIZE)) {
if (bucket.size() > 1) {
nextLevel.add(writeListBucket(bucket));
} else {
@@ -581,7 +528,7 @@ public class SegmentWriter {
int shift = 32 - (level + 1) * MapRecord.BITS_PER_LEVEL;
List<List<MapEntry>> buckets =
- newArrayList(nCopies(MapRecord.BUCKETS_PER_LEVEL,
(List<MapEntry>) null));
+ newArrayList(nCopies(MapRecord.BUCKETS_PER_LEVEL,
(List<MapEntry>) null));
for (MapEntry entry : entries) {
int index = (entry.getHash() >> shift) & mask;
List<MapEntry> bucket = buckets.get(index);
@@ -627,7 +574,7 @@ public class SegmentWriter {
int pos = 0;
List<RecordId> blockIds = newArrayListWithExpectedSize(
- data.length / BLOCK_SIZE + 1);
+ data.length / BLOCK_SIZE + 1);
// write as many full bulk segments as possible
while (pos + Segment.MAX_SEGMENT_SIZE <= data.length) {
@@ -654,9 +601,9 @@ public class SegmentWriter {
}
/**
- * @param blob
- * @return {@code true} iff {@code blob} is a {@code SegmentBlob}
- * and originates from the same segment store.
+ * @param blob
+ * @return {@code true} iff {@code blob} is a {@code SegmentBlob} and
+ * originates from the same segment store.
*/
private boolean sameStore(Blob blob) {
return (blob instanceof SegmentBlob)
@@ -688,8 +635,9 @@ public class SegmentWriter {
}
/**
- * Write a reference to an external blob. This method handles blob IDs
of
- * every length, but behaves differently for small and large blob IDs.
+ * Write a reference to an external blob. This method handles blob IDs
+ * of every length, but behaves differently for small and large blob
+ * IDs.
*
* @param blobId Blob ID.
* @return Record ID pointing to the written blob ID.
@@ -711,7 +659,7 @@ public class SegmentWriter {
}
private RecordId writeBlock(@Nonnull byte[] bytes, int offset, int
length)
- throws IOException {
+ throws IOException {
checkNotNull(bytes);
checkPositionIndexes(offset, offset + length, bytes.length);
return RecordWriters.newBlockWriter(bytes, offset,
length).write(writer, store);
@@ -754,7 +702,7 @@ public class SegmentWriter {
if (blobStore != null) {
String blobId = blobStore.writeBlob(new SequenceInputStream(
- new ByteArrayInputStream(data, 0, n), stream));
+ new ByteArrayInputStream(data, 0, n), stream));
return writeBlobId(blobId);
}
@@ -762,7 +710,7 @@ public class SegmentWriter {
n += read(stream, data, n, Segment.MAX_SEGMENT_SIZE - n);
long length = n;
List<RecordId> blockIds =
- newArrayListWithExpectedSize(2 * n / BLOCK_SIZE);
+ newArrayListWithExpectedSize(2 * n / BLOCK_SIZE);
// Write the data to bulk segments and collect the list of block
ids
while (n != 0) {
@@ -787,8 +735,9 @@ public class SegmentWriter {
}
private RecordId writeProperty(@Nonnull PropertyState state,
- @Nonnull Map<String, RecordId>
previousValues)
- throws IOException {
+ @Nonnull Map<String, RecordId> previousValues
+ )
+ throws IOException {
Type<?> type = state.getType();
int count = state.count();
@@ -887,8 +836,8 @@ public class SegmentWriter {
head |= propertyNames.length;
RecordId tid = RecordWriters.newTemplateWriter(ids, propertyNames,
- propertyTypes, head, primaryId, mixinIds, childNameId,
- propNamesId).write(writer, store);
+ propertyTypes, head, primaryId, mixinIds, childNameId,
+ propNamesId).write(writer, store);
templateCache.put(template, tid);
return tid;
}
@@ -958,8 +907,8 @@ public class SegmentWriter {
MapRecord base;
Map<String, RecordId> childNodes;
if (before != null
- && before.getChildNodeCount(2) > 1
- && after.getChildNodeCount(2) > 1) {
+ && before.getChildNodeCount(2) > 1
+ && after.getChildNodeCount(2) > 1) {
base = before.getChildNodeMap();
childNodes = new ChildNodeCollectorDiff().diff(before,
after);
} else {
@@ -967,8 +916,8 @@ public class SegmentWriter {
childNodes = newHashMap();
for (ChildNodeEntry entry : state.getChildNodeEntries()) {
childNodes.put(
- entry.getName(),
- writeNode(entry.getNodeState()));
+ entry.getName(),
+ writeNode(entry.getNodeState()));
}
}
ids.add(writeMap(base, childNodes));
@@ -1070,8 +1019,9 @@ public class SegmentWriter {
}
/**
- * @param node
- * @return {@code true} iff {@code node} originates from the same
segment store.
+ * @param node
+ * @return {@code true} iff {@code node} originates from the same
+ * segment store.
*/
private boolean sameStore(SegmentNodeState node) {
return sameStore(node.getRecordId().getSegmentId());
@@ -1079,12 +1029,12 @@ public class SegmentWriter {
/**
* @param property
- * @return {@code true} iff {@code property} is a {@code
SegmentPropertyState}
- * and originates from the same segment store.
+ * @return {@code true} iff {@code property} is a {@code
+ * SegmentPropertyState} and originates from the same segment store.
*/
private boolean sameStore(PropertyState property) {
return (property instanceof SegmentPropertyState)
- && sameStore(((Record) property).getRecordId().getSegmentId());
+ && sameStore(((Record)
property).getRecordId().getSegmentId());
}
private boolean isOldGeneration(RecordId id) {
@@ -1098,12 +1048,14 @@ public class SegmentWriter {
// compacted.
// Consider increasing
SegmentGCOptions.getRetainedGenerations()
throw new SegmentNotFoundException(
- "Cannot copy record from a generation that has been gc'ed
already", snfe);
+ "Cannot copy record from a generation that has been
gc'ed already", snfe);
}
}
private class ChildNodeCollectorDiff extends DefaultNodeStateDiff {
+
private final Map<String, RecordId> childNodes = newHashMap();
+
private IOException exception;
public Map<String, RecordId> diff(SegmentNodeState before,
ModifiedNodeState after) throws IOException {
@@ -1128,7 +1080,8 @@ public class SegmentWriter {
@Override
public boolean childNodeChanged(
- String name, NodeState before, NodeState after) {
+ String name, NodeState before, NodeState after
+ ) {
try {
childNodes.put(name, writeNode(after));
} catch (IOException e) {
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordWriters.java
Thu Jun 22 15:14:00 2017
@@ -291,7 +291,6 @@ final class RecordWriters {
/**
* Block record writer.
- * @see SegmentWriter#writeBlock
* @see RecordType#BLOCK
*/
private static class BlockWriter extends RecordWriter {
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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -25,11 +25,11 @@ import static com.google.common.base.Pre
import static java.util.Arrays.fill;
import static org.apache.jackrabbit.oak.commons.IOUtils.closeQuietly;
import static
org.apache.jackrabbit.oak.segment.CacheWeights.OBJECT_HEADER_SIZE;
+import static
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.BLOCK_SIZE;
import static
org.apache.jackrabbit.oak.segment.RecordNumbers.EMPTY_RECORD_NUMBERS;
import static org.apache.jackrabbit.oak.segment.SegmentId.isDataSegmentId;
import static org.apache.jackrabbit.oak.segment.SegmentVersion.LATEST_VERSION;
import static org.apache.jackrabbit.oak.segment.SegmentVersion.isValid;
-import static org.apache.jackrabbit.oak.segment.SegmentWriter.BLOCK_SIZE;
import java.io.IOException;
import java.io.OutputStream;
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java
Thu Jun 22 15:14:00 2017
@@ -21,9 +21,9 @@ package org.apache.jackrabbit.oak.segmen
import static com.google.common.base.Charsets.UTF_8;
import static com.google.common.collect.Sets.newHashSet;
import static java.util.Collections.emptySet;
+import static
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.BLOCK_SIZE;
import static org.apache.jackrabbit.oak.segment.Segment.MEDIUM_LIMIT;
import static org.apache.jackrabbit.oak.segment.Segment.SMALL_LIMIT;
-import static org.apache.jackrabbit.oak.segment.SegmentWriter.BLOCK_SIZE;
import java.io.InputStream;
import java.util.List;
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=1799590&r1=1799589&r2=1799590&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 Jun 22 15:14:00 2017
@@ -63,7 +63,7 @@ import org.slf4j.LoggerFactory;
* overrun be calling any of the write methods.
* <p>
* Instances of this class are <em>not thread safe</em>. See also the class
comment of
- * {@link SegmentWriter}.
+ * {@link DefaultSegmentWriter}.
*/
public class SegmentBufferWriter implements WriteOperationHandler {
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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -42,7 +42,7 @@ import com.google.common.util.concurrent
* which it passes to its {@link #execute(WriteOperation) execute} method.
* <p>
* Instances of this class are thread safe. See also the class comment of
- * {@link SegmentWriter}.
+ * {@link DefaultSegmentWriter}.
*/
public class SegmentBufferWriterPool implements WriteOperationHandler {
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeBuilder.java
Thu Jun 22 15:14:00 2017
@@ -27,6 +27,7 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,8 +48,12 @@ public class SegmentNodeBuilder extends
private static final int UPDATE_LIMIT =
Integer.getInteger("update.limit", 10000);
+ private final BlobStore blobStore;
+
+ private final SegmentReader reader;
+
@Nonnull
- private final SegmentWriter writer;
+ private final DefaultSegmentWriter writer;
/**
* Local update counter for the root builder.
@@ -64,14 +69,18 @@ public class SegmentNodeBuilder extends
*/
private long updateCount;
- SegmentNodeBuilder(@Nonnull SegmentNodeState base, @Nonnull SegmentWriter
writer) {
+ SegmentNodeBuilder(@Nonnull SegmentNodeState base, BlobStore blobStore,
SegmentReader reader, @Nonnull DefaultSegmentWriter writer) {
super(base);
+ this.blobStore = blobStore;
+ this.reader = reader;
this.writer = checkNotNull(writer);
this.updateCount = 0;
}
- private SegmentNodeBuilder(SegmentNodeBuilder parent, String name,
@Nonnull SegmentWriter writer) {
+ private SegmentNodeBuilder(SegmentNodeBuilder parent, String name,
BlobStore blobStore, SegmentReader reader, @Nonnull DefaultSegmentWriter
writer) {
super(parent, name);
+ this.blobStore = blobStore;
+ this.reader = reader;
this.writer = checkNotNull(writer);
this.updateCount = -1;
}
@@ -108,7 +117,7 @@ public class SegmentNodeBuilder extends
public SegmentNodeState getNodeState() {
try {
NodeState state = super.getNodeState();
- SegmentNodeState sState = writer.writeNode(state);
+ SegmentNodeState sState = new SegmentNodeState(reader, writer,
blobStore, writer.writeNode(state));
if (state != sState) {
set(sState);
if(!isChildBuilder()) {
@@ -124,12 +133,12 @@ public class SegmentNodeBuilder extends
@Override
protected MemoryNodeBuilder createChildBuilder(String name) {
- return new SegmentNodeBuilder(this, name, writer);
+ return new SegmentNodeBuilder(this, name, blobStore, reader, writer);
}
@Override
public Blob createBlob(InputStream stream) throws IOException {
- return writer.writeStream(stream);
+ return new SegmentBlob(blobStore, writer.writeStream(stream));
}
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java
Thu Jun 22 15:14:00 2017
@@ -50,6 +50,7 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.state.AbstractNodeState;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -63,8 +64,10 @@ public class SegmentNodeState extends Re
@Nonnull
private final SegmentReader reader;
+ private final BlobStore blobStore;
+
@Nonnull
- private final Supplier<SegmentWriter> writer;
+ private final Supplier<DefaultSegmentWriter> writer;
private volatile RecordId templateId = null;
@@ -72,18 +75,21 @@ public class SegmentNodeState extends Re
SegmentNodeState(
@Nonnull SegmentReader reader,
- @Nonnull Supplier<SegmentWriter> writer,
+ @Nonnull Supplier<DefaultSegmentWriter> writer,
+ BlobStore blobStore,
@Nonnull RecordId id) {
super(id);
this.reader = checkNotNull(reader);
this.writer = checkNotNull(memoize(writer));
+ this.blobStore = blobStore;
}
- SegmentNodeState(
+ public SegmentNodeState(
@Nonnull SegmentReader reader,
- @Nonnull SegmentWriter writer,
+ @Nonnull DefaultSegmentWriter writer,
+ BlobStore blobStore,
@Nonnull RecordId id) {
- this(reader, Suppliers.ofInstance(writer), id);
+ this(reader, Suppliers.ofInstance(writer), blobStore, id);
}
RecordId getTemplateId() {
@@ -448,7 +454,7 @@ public class SegmentNodeState extends Re
@Override @Nonnull
public SegmentNodeBuilder builder() {
- return new SegmentNodeBuilder(this, writer.get());
+ return new SegmentNodeBuilder(this, blobStore, reader, writer.get());
}
@Override
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStore.java
Thu Jun 22 15:14:00 2017
@@ -72,7 +72,7 @@ public class SegmentNodeStore implements
private final SegmentReader reader;
@Nonnull
- private final SegmentWriter writer;
+ private final DefaultSegmentWriter writer;
@CheckForNull
private final BlobStore blobStore;
@@ -87,7 +87,7 @@ public class SegmentNodeStore implements
private SegmentNodeStoreBuilder(
@Nonnull Revisions revisions,
@Nonnull SegmentReader reader,
- @Nonnull SegmentWriter writer,
+ @Nonnull DefaultSegmentWriter writer,
@Nullable BlobStore blobStore) {
this.revisions = revisions;
this.reader = reader;
@@ -138,7 +138,7 @@ public class SegmentNodeStore implements
public static SegmentNodeStoreBuilder builder(
@Nonnull Revisions revisions,
@Nonnull SegmentReader reader,
- @Nonnull SegmentWriter writer,
+ @Nonnull DefaultSegmentWriter writer,
@Nullable BlobStore blobStore) {
return new SegmentNodeStoreBuilder(checkNotNull(revisions),
checkNotNull(reader), checkNotNull(writer), blobStore);
@@ -149,7 +149,7 @@ public class SegmentNodeStore implements
public static final String CHECKPOINTS = "checkpoints";
@Nonnull
- private final SegmentWriter writer;
+ private final DefaultSegmentWriter writer;
@Nonnull
private final Scheduler scheduler;
@@ -228,7 +228,7 @@ public class SegmentNodeStore implements
@Nonnull
@Override
public Blob createBlob(InputStream stream) throws IOException {
- return writer.writeStream(stream);
+ return new SegmentBlob(blobStore, writer.writeStream(stream));
}
@Override
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentParser.java
Thu Jun 22 15:14:00 2017
@@ -25,11 +25,11 @@ import static com.google.common.collect.
import static com.google.common.collect.Lists.newArrayListWithCapacity;
import static java.util.Collections.singletonList;
import static org.apache.jackrabbit.oak.api.Type.BINARY;
+import static
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.BLOCK_SIZE;
import static org.apache.jackrabbit.oak.segment.ListRecord.LEVEL_SIZE;
import static org.apache.jackrabbit.oak.segment.Segment.MEDIUM_LIMIT;
import static org.apache.jackrabbit.oak.segment.Segment.RECORD_ID_BYTES;
import static org.apache.jackrabbit.oak.segment.Segment.SMALL_LIMIT;
-import static org.apache.jackrabbit.oak.segment.SegmentWriter.BLOCK_SIZE;
import static org.apache.jackrabbit.oak.segment.Template.MANY_CHILD_NODES;
import static org.apache.jackrabbit.oak.segment.Template.ZERO_CHILD_NODES;
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java
Thu Jun 22 15:14:00 2017
@@ -22,7 +22,7 @@ import static com.google.common.base.Pre
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkPositionIndexes;
import static com.google.common.base.Preconditions.checkState;
-import static org.apache.jackrabbit.oak.segment.SegmentWriter.BLOCK_SIZE;
+import static
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.BLOCK_SIZE;
import java.io.IOException;
import java.io.InputStream;
Added:
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=1799590&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
(added)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
Thu Jun 22 15:14:00 2017
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jackrabbit.oak.segment;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.common.base.Supplier;
+import org.apache.jackrabbit.oak.api.Blob;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
+public interface SegmentWriter {
+
+ void flush() throws IOException;
+
+ /**
+ * Write a map record.
+ *
+ * @param base base map relative to which the {@code changes} are
applied
+ * ot {@code null} for the empty map.
+ * @param changes the changed mapping to apply to the {@code base} map.
+ * @return the map record written
+ * @throws IOException
+ */
+ @Nonnull
+ // TODO frm this method is only used from test code, should it be removed?
+ RecordId writeMap(@Nullable MapRecord base, @Nonnull Map<String, RecordId>
changes) throws IOException;
+
+ /**
+ * Write a list record.
+ *
+ * @param list the list to write.
+ * @return the record id of the list written
+ * @throws IOException
+ */
+ @Nonnull
+ // TODO frm this method is only used from test code, should it be removed?
+ RecordId writeList(@Nonnull List<RecordId> list) throws IOException;
+
+ /**
+ * Write a string record.
+ *
+ * @param string the string to write.
+ * @return the record id of the string written.
+ * @throws IOException
+ */
+ @Nonnull
+ // TODO frm this method is only used from test code, should it be removed?
+ RecordId writeString(@Nonnull String string) throws IOException;
+
+ /**
+ * Write a blob (as list of block records)
+ *
+ * @param blob blob to write
+ * @return The segment blob written
+ * @throws IOException
+ */
+ @Nonnull
+ RecordId writeBlob(@Nonnull Blob blob) throws IOException;
+
+ /**
+ * Writes a block record containing the given block of bytes.
+ *
+ * @param bytes source buffer
+ * @param offset offset within the source buffer
+ * @param length number of bytes to write
+ * @return block record identifier
+ */
+ @Nonnull
+ // TODO frm this method is only used from test code, should it be removed?
+ RecordId writeBlock(@Nonnull byte[] bytes, int offset, int length) throws
IOException;
+
+ /**
+ * Writes a stream value record. The given stream is consumed <em>and
+ * closed</em> by this method.
+ *
+ * @param stream stream to be written
+ * @return blob for the passed {@code stream}
+ * @throws IOException if the input stream could not be read or the output
+ * could not be written
+ */
+ @Nonnull
+ RecordId writeStream(@Nonnull InputStream stream) throws IOException;
+
+ /**
+ * Write a property.
+ *
+ * @param state the property to write
+ * @return the property state written
+ * @throws IOException
+ */
+ @Nonnull
+ // TODO frm this method is only used from test code, should it be removed?
+ RecordId writeProperty(@Nonnull PropertyState state) throws IOException;
+
+ /**
+ * Write a node state.
+ * <p>
+ * <em>Note:</em> the returned {@code SegmentNodeState} instance is bound
to
+ * this {@code SegmentWriter} instance. That is, future calls to {@code
+ * #builder()} return a {@code NodeBuilder} that is also bound to the same
+ * {@code SegmentWriter} instance and uses it for writing any changes. This
+ * might not always be desired and callers of this method need to take care
+ * not to proliferate this writer through the returned node states beyond
+ * the intended bounds.
+ *
+ * @param state node state to write
+ * @return segment node state equal to {@code state}
+ * @throws IOException
+ */
+ @Nonnull
+ RecordId writeNode(@Nonnull NodeState state) throws IOException;
+
+ /**
+ * Write a node state, unless cancelled.
+ * <p>
+ * <em>Note:</em> the returned {@code SegmentNodeState} instance is bound
to
+ * this {@code SegmentWriter} instance. That is, future calls to {@code
+ * #builder()} return a {@code NodeBuilder} that is also bound to the same
+ * {@code SegmentWriter} instance and uses it for writing any changes. This
+ * might not always be desired and callers of this method need to take care
+ * not to proliferate this writer through the returned node states beyond
+ * the intended bounds.
+ *
+ * @param state node state to write
+ * @param cancel supplier to signal cancellation of this write operation
+ * @return segment node state equal to {@code state} or {@code null} if
+ * cancelled.
+ * @throws IOException
+ */
+ @CheckForNull
+ RecordId writeNode(@Nonnull NodeState state, @Nonnull Supplier<Boolean>
cancel) throws IOException;
+
+}
Propchange:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -31,7 +31,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.memory.MemoryStore;
/**
- * Builder for building {@link SegmentWriter} instances.
+ * Builder for building {@link DefaultSegmentWriter} instances.
* The returned instances are thread safe if {@link #withWriterPool()}
* was specified and <em>not</em> thread sage if {@link #withoutWriterPool()}
* was specified (default).
@@ -142,8 +142,8 @@ public final class SegmentWriterBuilder
* Build a {@code SegmentWriter} for a {@code FileStore}.
*/
@Nonnull
- public SegmentWriter build(@Nonnull FileStore store) {
- return new SegmentWriter(
+ public DefaultSegmentWriter build(@Nonnull FileStore store) {
+ return new DefaultSegmentWriter(
checkNotNull(store),
store.getReader(),
store.getSegmentIdProvider(),
@@ -159,8 +159,8 @@ public final class SegmentWriterBuilder
* {@code UnsupportedOperationException} to be thrown.
*/
@Nonnull
- public SegmentWriter build(@Nonnull ReadOnlyFileStore store) {
- return new SegmentWriter(
+ public DefaultSegmentWriter build(@Nonnull ReadOnlyFileStore store) {
+ return new DefaultSegmentWriter(
checkNotNull(store),
store.getReader(),
store.getSegmentIdProvider(),
@@ -184,8 +184,8 @@ public final class SegmentWriterBuilder
* Build a {@code SegmentWriter} for a {@code MemoryStore}.
*/
@Nonnull
- public SegmentWriter build(@Nonnull MemoryStore store) {
- return new SegmentWriter(
+ public DefaultSegmentWriter build(@Nonnull MemoryStore store) {
+ return new DefaultSegmentWriter(
checkNotNull(store),
store.getReader(),
store.getSegmentIdProvider(),
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriteOperationHandler.java
Thu Jun 22 15:14:00 2017
@@ -25,12 +25,12 @@ import javax.annotation.Nonnull;
/**
* A {@code WriteOperationHandler} executes {@link WriteOperation
WriteOperation}s and as
- * such serves as a bridge between {@link SegmentWriter} and {@link
SegmentBufferWriter}.
+ * such serves as a bridge between {@link DefaultSegmentWriter} and {@link
SegmentBufferWriter}.
*/
interface WriteOperationHandler {
/**
- * A {@code WriteOperation} encapsulates an operation on a {@link
SegmentWriter}.
+ * A {@code WriteOperation} encapsulates an operation on a {@link
DefaultSegmentWriter}.
* Executing it performs the actual act of persisting changes to a
* {@link SegmentBufferWriter}.
*/
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java
Thu Jun 22 15:14:00 2017
@@ -45,7 +45,7 @@ import org.apache.jackrabbit.oak.stats.S
/**
* Instances of this class manage the deduplication caches used
- * by the {@link SegmentWriter} to avoid writing multiple copies
+ * by the {@link DefaultSegmentWriter} to avoid writing multiple copies
* of the same record. The caches are striped into generations
* with one generation per gc cycle. This avoids records old
* generations being reused.
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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -51,7 +51,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.SegmentReader;
import org.apache.jackrabbit.oak.segment.SegmentStore;
import org.apache.jackrabbit.oak.segment.SegmentTracker;
-import org.apache.jackrabbit.oak.segment.SegmentWriter;
+import org.apache.jackrabbit.oak.segment.DefaultSegmentWriter;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -122,9 +122,9 @@ public abstract class AbstractFileStore
});
this.blobStore = builder.getBlobStore();
this.segmentCache = new SegmentCache(builder.getSegmentCacheSize());
- this.segmentReader = new CachingSegmentReader(new
Supplier<SegmentWriter>() {
+ this.segmentReader = new CachingSegmentReader(new
Supplier<DefaultSegmentWriter>() {
@Override
- public SegmentWriter get() {
+ public DefaultSegmentWriter get() {
return getWriter();
}
}, blobStore, builder.getStringCacheSize(),
builder.getTemplateCacheSize());
@@ -195,7 +195,7 @@ public abstract class AbstractFileStore
}
@Nonnull
- public abstract SegmentWriter getWriter();
+ public abstract DefaultSegmentWriter getWriter();
@Nonnull
public SegmentReader getReader() {
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=1799590&r1=1799589&r2=1799590&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 Jun 22 15:14:00 2017
@@ -66,13 +66,13 @@ import com.google.common.base.Suppliers;
import com.google.common.io.Closer;
import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
import org.apache.jackrabbit.oak.segment.Compactor;
+import org.apache.jackrabbit.oak.segment.DefaultSegmentWriter;
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.SegmentNodeState;
import org.apache.jackrabbit.oak.segment.SegmentNotFoundException;
import org.apache.jackrabbit.oak.segment.SegmentNotFoundExceptionListener;
-import org.apache.jackrabbit.oak.segment.SegmentWriter;
import org.apache.jackrabbit.oak.segment.WriterCacheManager;
import org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions;
import org.apache.jackrabbit.oak.segment.file.GCJournal.GCJournalEntry;
@@ -106,7 +106,7 @@ public class FileStore extends AbstractF
private static final AtomicLong GC_COUNT = new AtomicLong(0);
@Nonnull
- private final SegmentWriter segmentWriter;
+ private final DefaultSegmentWriter segmentWriter;
@Nonnull
private final GarbageCollector garbageCollector;
@@ -268,10 +268,10 @@ public class FileStore extends AbstractF
@Override
public RecordId get() {
try {
- SegmentWriter writer =
segmentWriterBuilder("init").build(FileStore.this);
+ DefaultSegmentWriter writer =
segmentWriterBuilder("init").build(FileStore.this);
NodeBuilder builder = EMPTY_NODE.builder();
builder.setChildNode("root", EMPTY_NODE);
- SegmentNodeState node =
writer.writeNode(builder.getNodeState());
+ SegmentNodeState node = new
SegmentNodeState(segmentReader, writer, getBlobStore(),
writer.writeNode(builder.getNodeState()));
writer.flush();
return node.getRecordId();
} catch (IOException e) {
@@ -398,7 +398,7 @@ public class FileStore extends AbstractF
@Override
@Nonnull
- public SegmentWriter getWriter() {
+ public DefaultSegmentWriter getWriter() {
return segmentWriter;
}
@@ -667,7 +667,7 @@ public class FileStore extends AbstractF
SegmentNodeState before = getHead();
CancelCompactionSupplier cancel = new
CancelCompactionSupplier(FileStore.this);
- SegmentWriter writer = segmentWriterBuilder("c")
+ DefaultSegmentWriter writer = segmentWriterBuilder("c")
.with(cacheManager)
.withGeneration(newGeneration)
.withoutWriterPool()
@@ -763,18 +763,18 @@ public class FileStore extends AbstractF
}
}
- private SegmentNodeState compact(NodeState head, SegmentWriter writer,
Supplier<Boolean> cancel)
+ private SegmentNodeState compact(NodeState head, DefaultSegmentWriter
writer, Supplier<Boolean> cancel)
throws IOException {
if (gcOptions.isOffline()) {
return new Compactor(segmentReader, writer, getBlobStore(),
cancel, gcOptions)
.compact(EMPTY_NODE, head, EMPTY_NODE);
} else {
- return writer.writeNode(head, cancel);
+ return new SegmentNodeState(segmentReader, writer,
getBlobStore(), writer.writeNode(head, cancel));
}
}
@CheckForNull
- private SegmentNodeState forceCompact(@Nonnull final SegmentWriter
writer,
+ private SegmentNodeState forceCompact(@Nonnull final
DefaultSegmentWriter writer,
@Nonnull final Supplier<Boolean>
cancel)
throws InterruptedException {
RecordId compactedId = revisions.setHead(new Function<RecordId,
RecordId>() {
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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -36,7 +36,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.Segment;
import org.apache.jackrabbit.oak.segment.SegmentGraph.SegmentGraphVisitor;
import org.apache.jackrabbit.oak.segment.SegmentId;
-import org.apache.jackrabbit.oak.segment.SegmentWriter;
+import org.apache.jackrabbit.oak.segment.DefaultSegmentWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,7 +54,7 @@ public class ReadOnlyFileStore extends A
private final TarFiles tarFiles;
@Nonnull
- private final SegmentWriter writer;
+ private final DefaultSegmentWriter writer;
private ReadOnlyRevisions revisions;
@@ -149,7 +149,7 @@ public class ReadOnlyFileStore extends A
@Nonnull
@Override
- public SegmentWriter getWriter() {
+ public DefaultSegmentWriter getWriter() {
return writer;
}
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=1799590&r1=1799589&r2=1799590&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
Thu Jun 22 15:14:00 2017
@@ -40,7 +40,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.SegmentReader;
import org.apache.jackrabbit.oak.segment.SegmentStore;
import org.apache.jackrabbit.oak.segment.SegmentTracker;
-import org.apache.jackrabbit.oak.segment.SegmentWriter;
+import org.apache.jackrabbit.oak.segment.DefaultSegmentWriter;
import org.apache.jackrabbit.oak.spi.blob.BlobStore;
/**
@@ -58,7 +58,7 @@ public class MemoryStore implements Segm
private final SegmentReader segmentReader;
@Nonnull
- private final SegmentWriter segmentWriter;
+ private final DefaultSegmentWriter segmentWriter;
private final ConcurrentMap<SegmentId, Segment> segments =
Maps.newConcurrentMap();
@@ -71,9 +71,9 @@ public class MemoryStore implements Segm
}
});
this.revisions = new MemoryStoreRevisions();
- Supplier<SegmentWriter> getWriter = new Supplier<SegmentWriter>() {
+ Supplier<DefaultSegmentWriter> getWriter = new
Supplier<DefaultSegmentWriter>() {
@Override
- public SegmentWriter get() {
+ public DefaultSegmentWriter get() {
return getWriter();
}
};
@@ -84,7 +84,7 @@ public class MemoryStore implements Segm
}
@Nonnull
- public SegmentWriter getWriter() {
+ public DefaultSegmentWriter getWriter() {
return segmentWriter;
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStoreRevisions.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStoreRevisions.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStoreRevisions.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStoreRevisions.java
Thu Jun 22 15:14:00 2017
@@ -45,7 +45,7 @@ public class MemoryStoreRevisions implem
if (head == null) {
NodeBuilder builder = EMPTY_NODE.builder();
builder.setChildNode("root", EMPTY_NODE);
- head =
store.getWriter().writeNode(builder.getNodeState()).getRecordId();
+ head = store.getWriter().writeNode(builder.getNodeState());
store.getWriter().flush();
}
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BigInlinedBinaryIT.java
Thu Jun 22 15:14:00 2017
@@ -22,7 +22,7 @@ import static java.lang.Long.signum;
import static java.lang.System.getProperty;
import static org.apache.jackrabbit.oak.api.Type.BINARY;
import static org.apache.jackrabbit.oak.segment.ListRecord.LEVEL_SIZE;
-import static org.apache.jackrabbit.oak.segment.SegmentWriter.BLOCK_SIZE;
+import static
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.BLOCK_SIZE;
import static
org.apache.jackrabbit.oak.segment.file.FileStoreBuilder.fileStoreBuilder;
import java.io.File;
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BlobIdRecordTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BlobIdRecordTest.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BlobIdRecordTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/BlobIdRecordTest.java
Thu Jun 22 15:14:00 2017
@@ -126,9 +126,9 @@ public class BlobIdRecordTest {
@Test
public void shortReferencesShouldHaveBlobIdType() throws Exception {
try (FileStore ss = newFileStore(new ShortIdMappingBlobStore())) {
- SegmentWriter sw = segmentWriterBuilder("test").build(ss);
+ DefaultSegmentWriter sw = segmentWriterBuilder("test").build(ss);
byte[] content = new byte[Segment.MEDIUM_LIMIT + 1];
- SegmentBlob sb = sw.writeBlob(new ArrayBasedBlob(content));
+ SegmentBlob sb = new SegmentBlob(ss.getBlobStore(),
sw.writeBlob(new ArrayBasedBlob(content)));
assertRecordTypeEquals(sb, RecordType.BLOB_ID);
}
}
@@ -136,9 +136,9 @@ public class BlobIdRecordTest {
@Test
public void longReferencesShouldHaveBlobIdType() throws Exception {
try (FileStore ss = newFileStore(new LongIdMappingBlobStore())) {
- SegmentWriter sw = segmentWriterBuilder("test").build(ss);
+ DefaultSegmentWriter sw = segmentWriterBuilder("test").build(ss);
byte[] content = new byte[Segment.MEDIUM_LIMIT + 1];
- SegmentBlob sb = sw.writeBlob(new ArrayBasedBlob(content));
+ SegmentBlob sb = new SegmentBlob(ss.getBlobStore(),
sw.writeBlob(new ArrayBasedBlob(content)));
assertRecordTypeEquals(sb, RecordType.BLOB_ID);
}
}
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactionAndCleanupIT.java
Thu Jun 22 15:14:00 2017
@@ -68,6 +68,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.file.FileStore;
import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
import org.apache.jackrabbit.oak.segment.tool.Compact;
+import org.apache.jackrabbit.oak.spi.blob.BlobStore;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
@@ -755,14 +756,16 @@ public class CompactionAndCleanupIT {
@Test
public void cleanupCyclicGraph() throws Exception {
FileStore fileStore = fileStoreBuilder(getFileStoreFolder()).build();
- final SegmentWriter writer = fileStore.getWriter();
+ final SegmentReader reader = fileStore.getReader();
+ final DefaultSegmentWriter writer = fileStore.getWriter();
+ final BlobStore blobStore = fileStore.getBlobStore();
final SegmentNodeState oldHead = fileStore.getHead();
final SegmentNodeState child = run(new Callable<SegmentNodeState>() {
@Override
public SegmentNodeState call() throws Exception {
NodeBuilder builder = EMPTY_NODE.builder();
- return writer.writeNode(EMPTY_NODE);
+ return new SegmentNodeState(reader, writer, blobStore,
writer.writeNode(EMPTY_NODE));
}
});
SegmentNodeState newHead = run(new Callable<SegmentNodeState>() {
@@ -770,7 +773,7 @@ public class CompactionAndCleanupIT {
public SegmentNodeState call() throws Exception {
NodeBuilder builder = oldHead.builder();
builder.setChildNode("child", child);
- return writer.writeNode(builder.getNodeState());
+ return new SegmentNodeState(reader, writer, blobStore,
writer.writeNode(builder.getNodeState()));
}
});
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTest.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompactorTest.java
Thu Jun 22 15:14:00 2017
@@ -52,7 +52,7 @@ public class CompactorTest {
NodeStore store =
SegmentNodeStoreBuilders.builder(memoryStore).build();
init(store);
- SegmentWriter writer =
segmentWriterBuilder("c").withGeneration(1).build(memoryStore);
+ DefaultSegmentWriter writer =
segmentWriterBuilder("c").withGeneration(1).build(memoryStore);
Compactor compactor = new Compactor(memoryStore.getReader(), writer,
memoryStore.getBlobStore(), Suppliers.ofInstance(false),
defaultGCOptions());
addTestContent(store, 0);
@@ -75,7 +75,7 @@ public class CompactorTest {
// doesn't have the child named "b".
NodeStore store =
SegmentNodeStoreBuilders.builder(memoryStore).build();
- SegmentWriter writer =
segmentWriterBuilder("c").withGeneration(1).build(memoryStore);
+ DefaultSegmentWriter writer =
segmentWriterBuilder("c").withGeneration(1).build(memoryStore);
Compactor compactor = new Compactor(memoryStore.getReader(), writer,
memoryStore.getBlobStore(), Suppliers.ofInstance(true),
defaultGCOptions());
SegmentNodeState sns = compactor.compact(store.getRoot(),
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompareAgainstBaseStateTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompareAgainstBaseStateTest.java?rev=1799590&r1=1799589&r2=1799590&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompareAgainstBaseStateTest.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CompareAgainstBaseStateTest.java
Thu Jun 22 15:14:00 2017
@@ -44,7 +44,10 @@ public class CompareAgainstBaseStateTest
private NodeBuilder builder;
public CompareAgainstBaseStateTest() throws IOException {
- builder = new
MemoryStore().getWriter().writeNode(EMPTY_NODE).builder();
+ MemoryStore store = new MemoryStore();
+ RecordId id = store.getWriter().writeNode(EMPTY_NODE);
+ SegmentNodeState node = new SegmentNodeState(store.getReader(),
store.getWriter(), store.getBlobStore(), id);
+ builder = node.builder();
}
@Before