diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeBuilder.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeBuilder.java index e40e909..e6c6ec4 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeBuilder.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoNodeBuilder.java @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugins.mongomk; import java.io.IOException; import java.io.InputStream; +import com.google.common.base.Preconditions; import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder; import org.apache.jackrabbit.oak.spi.state.NodeBuilder; @@ -34,22 +35,30 @@ class MongoNodeBuilder extends MemoryNodeBuilder { */ protected final MongoNodeStore store; + private MongoRootBuilder root; + private NodeState base; + private NodeState rootBase = null; + protected MongoNodeBuilder(MongoNodeStore store, MongoNodeState base) { super(base); + Preconditions.checkState(this instanceof MongoRootBuilder); this.store = store; + this.root = (MongoRootBuilder) this; } private MongoNodeBuilder(MongoNodeStore store, MongoNodeBuilder parent, String name) { super(parent, name); this.store = store; + this.root = parent.root; } @Override public NodeState getBaseState() { - if (base == null) { + if (base == null || rootBase != root.getBaseState()) { base = getParent().getBaseState().getChildNode(getName()); + rootBase = root.getBaseState(); } return base; }