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/11/09 13:55:49 UTC
svn commit: r1637672 - 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: alexparvulescu
Date: Sun Nov 9 12:55:49 2014
New Revision: 1637672
URL: http://svn.apache.org/r1637672
Log:
OAK-2218 Allow SegmentNodeBuilder to provide child builders of the same type
- reverting r1637667
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/
------------------------------------------------------------------------------
Reverse-merged /jackrabbit/oak/trunk:r1633697,1633768
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=1637672&r1=1637671&r2=1637672&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 Sun Nov 9 12:55:49 2014
@@ -16,10 +16,6 @@
*/
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;
@@ -34,19 +30,7 @@ public class SegmentNodeBuilder extends
private final SegmentWriter writer;
- /**
- * Local update counter for the root builder.
- *
- * The value encodes both the counter and the type of the node builder:
- * <ul>
- * <li>value >= <code>0</code> represents a root builder (builder keeps
- * counter updates)</li>
- * <li>value = <code>-1</code> represents a child builder (value doesn't
- * change, builder doesn't keep an updated counter)</li>
- * </ul>
- *
- */
- private long updateCount;
+ private long updateCount = 0;
SegmentNodeBuilder(SegmentNodeState base) {
this(base, base.getTracker().getWriter());
@@ -55,37 +39,27 @@ public class SegmentNodeBuilder extends
SegmentNodeBuilder(SegmentNodeState base, SegmentWriter writer) {
super(base);
this.writer = writer;
- this.updateCount = 0;
- }
-
- SegmentNodeBuilder(SegmentNodeBuilder parent, String name,
- SegmentWriter writer) {
- super(parent, name);
- this.writer = writer;
- this.updateCount = -1;
}
//-------------------------------------------------< MemoryNodeBuilder >--
@Override
protected void updated() {
- if (isChildBuilder()) {
- super.updated();
- } else {
- updateCount++;
- if (updateCount > UPDATE_LIMIT) {
- getNodeState();
- }
+ updateCount++;
+ if (updateCount > UPDATE_LIMIT) {
+ getNodeState();
}
}
- private boolean isChildBuilder() {
- return updateCount < 0;
- }
-
//-------------------------------------------------------< 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);
@@ -96,15 +70,4 @@ 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=1637672&r1=1637671&r2=1637672&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 Sun Nov 9 12:55:49 2014
@@ -34,6 +34,7 @@ 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;
@@ -126,7 +127,7 @@ public class SegmentNodeStore implements
@Override
public NodeState merge(
@Nonnull NodeBuilder builder, @Nonnull CommitHook commitHook,
- @Nonnull CommitInfo info) throws CommitFailedException {
+ @Nullable CommitInfo info) throws CommitFailedException {
checkArgument(builder instanceof SegmentNodeBuilder);
checkNotNull(commitHook);
@@ -155,7 +156,7 @@ public class SegmentNodeStore implements
SegmentNodeBuilder snb = (SegmentNodeBuilder) builder;
NodeState root = getRoot();
- NodeState before = snb.getBaseState();
+ SegmentNodeState before = snb.getBaseState();
if (!fastEquals(before, root)) {
SegmentNodeState after = snb.getNodeState();
snb.reset(root);
@@ -300,9 +301,9 @@ public class SegmentNodeStore implements
private final Random random = new Random();
- private final NodeState before;
+ private SegmentNodeState before;
- private final SegmentNodeState after;
+ private SegmentNodeState after;
private final CommitHook hook;
@@ -318,7 +319,10 @@ public class SegmentNodeStore implements
this.info = checkNotNull(info);
}
- private boolean setHead(SegmentNodeState before, SegmentNodeState after) {
+ private boolean setHead(SegmentNodeBuilder builder) {
+ SegmentNodeState before = builder.getBaseState();
+ SegmentNodeState after = builder.getNodeState();
+
refreshHead();
if (store.setHead(before, after)) {
head.set(after);
@@ -330,7 +334,8 @@ public class SegmentNodeStore implements
}
}
- private SegmentNodeBuilder prepare(SegmentNodeState state) throws CommitFailedException {
+ private SegmentNodeBuilder prepare() throws CommitFailedException {
+ SegmentNodeState state = head.get();
SegmentNodeBuilder builder = state.builder();
if (fastEquals(before, state.getChildNode(ROOT))) {
// use a shortcut when there are no external changes
@@ -365,9 +370,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(state);
+ SegmentNodeBuilder builder = prepare();
// use optimistic locking to update the journal
- if (setHead(state, builder.getNodeState())) {
+ if (setHead(builder)) {
return -1;
}
}
@@ -401,14 +406,14 @@ public class SegmentNodeStore implements
builder.setProperty("token", UUID.randomUUID().toString());
builder.setProperty("timeout", now + timeout);
- if (setHead(state, builder.getNodeState())) {
+ if (setHead(builder)) {
// lock acquired; rebase, apply commit hooks, and unlock
- builder = prepare(state);
+ builder = prepare();
builder.removeProperty("token");
builder.removeProperty("timeout");
// complete the commit
- if (setHead(state, builder.getNodeState())) {
+ if (setHead(builder)) {
return;
}
}