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 ju...@apache.org on 2013/08/15 10:52:24 UTC
svn commit: r1514206 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins:
memory/MemoryNodeBuilder.java segment/SegmentNodeBuilder.java
segment/SegmentNodeState.java segment/SegmentRootBuilder.java
Author: jukka
Date: Thu Aug 15 08:52:23 2013
New Revision: 1514206
URL: http://svn.apache.org/r1514206
Log:
OAK-659: Move purge logic for transient changes below the NodeBuilder interface
Make SegmentRootBuilder.getNodeState() flush all changes
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
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/SegmentNodeState.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentRootBuilder.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java?rev=1514206&r1=1514205&r2=1514206&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeBuilder.java Thu Aug 15 08:52:23 2013
@@ -79,18 +79,18 @@ public class MemoryNodeBuilder implement
/**
* Parent builder, or {@code null} for a root builder.
*/
- private final MemoryNodeBuilder parent;
+ protected final MemoryNodeBuilder parent;
/**
* Name of this child node within the parent builder,
* or {@code null} for a root builder.
*/
- private final String name;
+ protected final String name;
/**
* Root builder, or {@code this} for the root builder itself.
*/
- private final MemoryNodeBuilder rootBuilder;
+ protected final MemoryNodeBuilder rootBuilder;
/**
* Internal revision counter for the base state of this builder. The counter
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=1514206&r1=1514205&r2=1514206&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 Thu Aug 15 08:52:23 2013
@@ -17,15 +17,24 @@
package org.apache.jackrabbit.oak.plugins.segment;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
class SegmentNodeBuilder extends MemoryNodeBuilder {
+ protected NodeState base;
+
+ protected long baseRevision;
+
protected SegmentNodeBuilder(SegmentNodeState base) {
super(base);
+ this.base = base;
+ this.baseRevision = 0;
}
private SegmentNodeBuilder(SegmentNodeBuilder parent, String name) {
super(parent, name);
+ this.base = parent.base.getChildNode(name);
+ this.baseRevision = parent.baseRevision;
}
@Override
@@ -33,4 +42,15 @@ class SegmentNodeBuilder extends MemoryN
return new SegmentNodeBuilder(this, name);
}
+ @Override
+ public NodeState getBaseState() {
+ // TODO: Use the head mechanism in MemoryNodeBuilder instead of
+ // overriding base state tracking
+ if (baseRevision != ((SegmentNodeBuilder) rootBuilder).baseRevision) {
+ base = parent.getBaseState().getChildNode(name);
+ baseRevision = ((SegmentNodeBuilder) rootBuilder).baseRevision;
+ }
+ return base;
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java?rev=1514206&r1=1514205&r2=1514206&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java Thu Aug 15 08:52:23 2013
@@ -131,7 +131,7 @@ public class SegmentNodeState extends Ab
@Override @Nonnull
public NodeBuilder builder() {
- return new SegmentRootBuilder(this);
+ return new SegmentRootBuilder(this, new SegmentWriter(store));
}
@Override
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentRootBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentRootBuilder.java?rev=1514206&r1=1514205&r2=1514206&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentRootBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentRootBuilder.java Thu Aug 15 08:52:23 2013
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
+
class SegmentRootBuilder extends SegmentNodeBuilder {
/**
@@ -25,19 +27,38 @@ class SegmentRootBuilder extends Segment
private static final int UPDATE_LIMIT =
Integer.getInteger("update.limit", 1000);
+ private final SegmentWriter writer;
+
private long updateCount = 0;
- SegmentRootBuilder(SegmentNodeState base) {
+ SegmentRootBuilder(SegmentNodeState base, SegmentWriter writer) {
super(base);
+ this.writer = writer;
}
@Override
protected void updated() {
updateCount++;
if (updateCount > UPDATE_LIMIT) {
- // TODO: flush
+ getNodeState(); // flush changes
updateCount = 0;
}
}
+ // TODO: Allow flushing of also non-root builders
+ @Override
+ public SegmentNodeState getNodeState() {
+ SegmentNodeState state = writer.writeNode(super.getNodeState());
+ writer.flush();
+ super.reset(state);
+ return state;
+ }
+
+ @Override
+ public void reset(NodeState newBase) {
+ base = newBase;
+ baseRevision++;
+ super.reset(newBase);
+ }
+
}