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 al...@apache.org on 2014/10/22 21:48:30 UTC
svn commit: r1633697 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment:
SegmentNodeBuilder.java SegmentNodeStore.java
Author: alexparvulescu
Date: Wed Oct 22 19:48:29 2014
New Revision: 1633697
URL: http://svn.apache.org/r1633697
Log:
OAK-2218 Allow SegmentNodeBuilder to provide child builders of the same type
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java?rev=1633697&r1=1633696&r2=1633697&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java Wed Oct 22 19:48:29 2014
@@ -16,6 +16,10 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -47,6 +51,12 @@ public class SegmentNodeBuilder extends
this.writer = writer;
}
+ SegmentNodeBuilder(SegmentNodeBuilder parent, String name,
+ SegmentWriter writer) {
+ super(parent, name);
+ this.writer = writer;
+ }
+
//-------------------------------------------------< MemoryNodeBuilder >--
@Override
@@ -60,12 +70,6 @@ public class SegmentNodeBuilder extends
//-------------------------------------------------------< NodeBuilder >--
@Override
- public SegmentNodeState getBaseState() {
- // guaranteed to be a SegmentNodeState
- return (SegmentNodeState) super.getBaseState();
- }
-
- @Override
public SegmentNodeState getNodeState() {
NodeState state = super.getNodeState();
SegmentNodeState sstate = writer.writeNode(state);
@@ -76,4 +80,15 @@ public class SegmentNodeBuilder extends
return sstate;
}
+ @Override
+ protected MemoryNodeBuilder createChildBuilder(String name) {
+ return new SegmentNodeBuilder(this, name, writer);
+ }
+
+ @Override
+ public Blob createBlob(InputStream stream) throws IOException {
+ SegmentNodeState sns = getNodeState();
+ return sns.getTracker().getWriter().writeStream(stream);
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1633697&r1=1633696&r2=1633697&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java Wed Oct 22 19:48:29 2014
@@ -34,7 +34,6 @@ import java.util.concurrent.atomic.Atomi
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -133,7 +132,7 @@ public class SegmentNodeStore implements
@Override
public NodeState merge(
@Nonnull NodeBuilder builder, @Nonnull CommitHook commitHook,
- @Nullable CommitInfo info) throws CommitFailedException {
+ @Nonnull CommitInfo info) throws CommitFailedException {
checkArgument(builder instanceof SegmentNodeBuilder);
checkNotNull(commitHook);
@@ -162,7 +161,7 @@ public class SegmentNodeStore implements
SegmentNodeBuilder snb = (SegmentNodeBuilder) builder;
NodeState root = getRoot();
- SegmentNodeState before = snb.getBaseState();
+ NodeState before = snb.getBaseState();
if (!fastEquals(before, root)) {
SegmentNodeState after = snb.getNodeState();
snb.reset(root);
@@ -307,9 +306,9 @@ public class SegmentNodeStore implements
private final Random random = new Random();
- private SegmentNodeState before;
+ private final NodeState before;
- private SegmentNodeState after;
+ private final SegmentNodeState after;
private final CommitHook hook;
@@ -325,10 +324,7 @@ public class SegmentNodeStore implements
this.info = checkNotNull(info);
}
- private boolean setHead(SegmentNodeBuilder builder) {
- SegmentNodeState before = builder.getBaseState();
- SegmentNodeState after = builder.getNodeState();
-
+ private boolean setHead(SegmentNodeState before, SegmentNodeState after) {
refreshHead();
if (store.setHead(before, after)) {
head.set(after);
@@ -340,8 +336,7 @@ public class SegmentNodeStore implements
}
}
- private SegmentNodeBuilder prepare() throws CommitFailedException {
- SegmentNodeState state = head.get();
+ private SegmentNodeBuilder prepare(SegmentNodeState state) throws CommitFailedException {
SegmentNodeBuilder builder = state.builder();
if (fastEquals(before, state.getChildNode(ROOT))) {
// use a shortcut when there are no external changes
@@ -376,9 +371,9 @@ public class SegmentNodeStore implements
// someone else has a pessimistic lock on the journal,
// so we should not try to commit anything yet
} else {
- SegmentNodeBuilder builder = prepare();
+ SegmentNodeBuilder builder = prepare(state);
// use optimistic locking to update the journal
- if (setHead(builder)) {
+ if (setHead(state, builder.getNodeState())) {
return -1;
}
}
@@ -412,14 +407,14 @@ public class SegmentNodeStore implements
builder.setProperty("token", UUID.randomUUID().toString());
builder.setProperty("timeout", now + timeout);
- if (setHead(builder)) {
+ if (setHead(state, builder.getNodeState())) {
// lock acquired; rebase, apply commit hooks, and unlock
- builder = prepare();
+ builder = prepare(state);
builder.removeProperty("token");
builder.removeProperty("timeout");
// complete the commit
- if (setHead(builder)) {
+ if (setHead(state, builder.getNodeState())) {
return;
}
}