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 2014/11/10 14:52:29 UTC
svn commit: r1637859 - in /jackrabbit/oak/branches/1.0: ./
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
Author: mduerig
Date: Mon Nov 10 13:52:29 2014
New Revision: 1637859
URL: http://svn.apache.org/r1637859
Log:
OAK-2218 Allow SegmentNodeBuilder to provide child builders of the same type
- merged r1633697
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1633697
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java?rev=1637859&r1=1637858&r2=1637859&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeBuilder.java Mon Nov 10 13:52: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;
@@ -41,6 +45,12 @@ public class SegmentNodeBuilder extends
this.writer = writer;
}
+ SegmentNodeBuilder(SegmentNodeBuilder parent, String name,
+ SegmentWriter writer) {
+ super(parent, name);
+ this.writer = writer;
+ }
+
//-------------------------------------------------< MemoryNodeBuilder >--
@Override
@@ -54,12 +64,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);
@@ -70,4 +74,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/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java?rev=1637859&r1=1637858&r2=1637859&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStore.java Mon Nov 10 13:52: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;
@@ -127,7 +126,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);
@@ -156,7 +155,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);
@@ -301,9 +300,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;
@@ -319,10 +318,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);
@@ -334,8 +330,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
@@ -370,9 +365,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;
}
}
@@ -406,14 +401,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;
}
}