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 2012/04/06 10:44:59 UTC
svn commit: r1310234 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/
oak-mk/src/main/java/org/apache/jackrabbit/mk/core/
oak-mk/src/main/java/org/apache/jackrabbit/mk/model/
oak-mk/src/main/java/org/apache/jackrabbi...
Author: jukka
Date: Fri Apr 6 08:44:58 2012
New Revision: 1310234
URL: http://svn.apache.org/viewvc?rev=1310234&view=rev
Log:
OAK-46: Efficient diffing of large child node lists
Make the comparison operation a part of the tree interfaces instead of a concrete class
Added:
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/AbstractRevisionStore.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeDelta.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStateDiff.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStore.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/TraversingNodeDiffHandler.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/CopyingGC.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/DefaultRevisionStore.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/RevisionProvider.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java Fri Apr 6 08:44:58 2012
@@ -20,6 +20,7 @@ package org.apache.jackrabbit.oak.kernel
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.mk.model.NodeState;
+import org.apache.jackrabbit.mk.model.NodeStateDiff;
import org.apache.jackrabbit.mk.model.NodeStateEditor;
import org.apache.jackrabbit.mk.model.NodeStore;
@@ -56,4 +57,9 @@ public class KernelNodeStore implements
return ((KernelNodeStateEditor) branch).mergeInto(kernel, (KernelNodeState) target);
}
+ @Override
+ public void compare(NodeState before, NodeState after, NodeStateDiff diff) {
+ throw new UnsupportedOperationException(); // TODO
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java Fri Apr 6 08:44:58 2012
@@ -271,7 +271,7 @@ public class MicroKernelImpl implements
return buff.newline().toString();
}
- TraversingNodeDiffHandler diffHandler = new TraversingNodeDiffHandler() {
+ TraversingNodeDiffHandler diffHandler = new TraversingNodeDiffHandler(rp) {
@Override
public void propertyAdded(PropertyState after) {
buff.tag('+').
@@ -331,7 +331,7 @@ public class MicroKernelImpl implements
// TODO refactor code, avoid duplication
- diffHandler = new TraversingNodeDiffHandler() {
+ diffHandler = new TraversingNodeDiffHandler(rp) {
@Override
public void propertyAdded(PropertyState after) {
buff.tag('+').
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeDelta.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeDelta.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeDelta.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeDelta.java Fri Apr 6 08:44:58 2012
@@ -65,7 +65,7 @@ public class NodeDelta {
RevisionProvider provider, NodeState node1, NodeState node2) {
this.provider = provider;
this.node1 = node1;
- new DiffHandler().compare(node1, node2);
+ provider.compare(node1, node2, new DiffHandler());
}
public Map<String, String> getAddedProperties() {
@@ -173,7 +173,7 @@ public class NodeDelta {
//--------------------------------------------------------< inner classes >
- private class DiffHandler extends NodeStateDiff {
+ private class DiffHandler implements NodeStateDiff {
@Override
public void propertyAdded(PropertyState after) {
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStateDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStateDiff.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStateDiff.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStateDiff.java Fri Apr 6 08:44:58 2012
@@ -16,148 +16,64 @@
*/
package org.apache.jackrabbit.mk.model;
-import java.util.HashSet;
-import java.util.Set;
-
/**
- * Utility base class for comparing two {@link NodeState} instances. The
- * {@link #compare(NodeState, NodeState)} method will go through all
+ * Handler of node state differences.
+ * The {@link NodeStore#compare(NodeState, NodeState, NodeStateDiff)} reports
+ * detected node state differences by calling methods of a handler instance
+ * that implements this interface. The compare method will go through all
* properties and child nodes of the two states, calling the relevant
* added, changed or deleted methods where appropriate. Differences in
- * the ordering of properties or child nodes do not affect the comparison.
+ * the ordering of properties or child nodes do not affect the comparison,
+ * and the order in which such differences are reported is unspecified.
*/
-public class NodeStateDiff {
+public interface NodeStateDiff {
/**
- * Called by {@link #compare(NodeState, NodeState)} for all added
- * properties. The default implementation does nothing.
+ * Called for all added properties.
*
* @param after property state after the change
*/
- public void propertyAdded(PropertyState after) {
- }
+ void propertyAdded(PropertyState after);
/**
- * Called by {@link #compare(NodeState, NodeState)} for all changed
- * properties. The names of the given two property states are guaranteed
- * to be the same. The default implementation does nothing.
+ * Called for all changed properties. The names of the given two
+ * property states are guaranteed to be the same.
*
* @param before property state before the change
* @param after property state after the change
*/
- public void propertyChanged(PropertyState before, PropertyState after) {
- }
+ void propertyChanged(PropertyState before, PropertyState after);
/**
- * Called by {@link #compare(NodeState, NodeState)} for all deleted
- * properties. The default implementation does nothing.
+ * Called for all deleted properties.
*
* @param before property state before the change
*/
- public void propertyDeleted(PropertyState before) {
- }
+ void propertyDeleted(PropertyState before);
/**
- * Called by {@link #compare(NodeState, NodeState)} for all added
- * child nodes. The default implementation does nothing.
+ * Called for all added child nodes.
*
* @param name name of the added child node
* @param after child node state after the change
*/
- public void childNodeAdded(String name, NodeState after) {
- }
+ void childNodeAdded(String name, NodeState after);
/**
- * Called by {@link #compare(NodeState, NodeState)} for all changed
- * child nodes. The default implementation does nothing.
+ * Called for all changed child nodes.
*
* @param name name of the changed child node
* @param before child node state before the change
* @param after child node state after the change
*/
- public void childNodeChanged(String name, NodeState before, NodeState after) {
- }
+ void childNodeChanged(String name, NodeState before, NodeState after);
/**
- * Called by {@link #compare(NodeState, NodeState)} for all deleted
- * child nodes. The default implementation does nothing.
+ * Called for all deleted child nodes.
*
* @param name name of the deleted child node
* @param before child node state before the change
*/
- public void childNodeDeleted(String name, NodeState before) {
- }
-
- /**
- * Compares the given two node states. Any found differences are
- * reported by calling the relevant added, changed or deleted methods.
- *
- * @param before node state before changes
- * @param after node state after changes
- */
- public void compare(NodeState before, NodeState after) {
- compareProperties(before, after);
- compareChildNodes(before, after);
- }
-
- /**
- * Compares the properties of the given two node states.
- *
- * @param before node state before changes
- * @param after node state after changes
- */
- private void compareProperties(NodeState before, NodeState after) {
- Set<String> beforeProperties = new HashSet<String>();
-
- for (PropertyState beforeProperty : before.getProperties()) {
- String name = beforeProperty.getName();
- PropertyState afterProperty = after.getProperty(name);
- if (afterProperty == null) {
- propertyDeleted(beforeProperty);
- } else {
- beforeProperties.add(name);
- if (!beforeProperty.equals(afterProperty)) {
- propertyChanged(beforeProperty, afterProperty);
- }
- }
- }
-
- for (PropertyState afterProperty : after.getProperties()) {
- if (!beforeProperties.contains(afterProperty.getName())) {
- propertyAdded(afterProperty);
- }
- }
- }
-
- /**
- * Compares the child nodes of the given two node states.
- *
- * @param before node state before changes
- * @param after node state after changes
- */
- private void compareChildNodes(NodeState before, NodeState after) {
- Set<String> beforeChildNodes = new HashSet<String>();
-
- for (ChildNodeEntry beforeCNE : before.getChildNodeEntries(0, -1)) {
- String name = beforeCNE.getName();
- NodeState beforeChild = beforeCNE.getNode();
- NodeState afterChild = after.getChildNode(name);
- if (afterChild == null) {
- childNodeDeleted(name, beforeChild);
- } else {
- beforeChildNodes.add(name);
- if (!beforeChild.equals(afterChild)) {
- childNodeChanged(name, beforeChild, afterChild);
- }
- }
- }
-
- for (ChildNodeEntry afterChild : after.getChildNodeEntries(0, -1)) {
- String name = afterChild.getName();
- if (!beforeChildNodes.contains(name)) {
- childNodeAdded(name, afterChild.getNode());
- }
- }
- }
+ void childNodeDeleted(String name, NodeState before);
}
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStore.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/NodeStore.java Fri Apr 6 08:44:58 2012
@@ -59,4 +59,15 @@ public interface NodeStore {
*/
NodeState merge(NodeStateEditor branch, NodeState target);
+ /**
+ * Compares the given two node states. Any found differences are
+ * reported by calling the relevant added, changed or deleted methods
+ * of the given handler.
+ *
+ * @param before node state before changes
+ * @param after node state after changes
+ * @param diff handler of node state differences
+ */
+ void compare(NodeState before, NodeState after, NodeStateDiff diff);
+
}
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/TraversingNodeDiffHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/TraversingNodeDiffHandler.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/TraversingNodeDiffHandler.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/model/TraversingNodeDiffHandler.java Fri Apr 6 08:44:58 2012
@@ -23,18 +23,20 @@ import org.apache.jackrabbit.mk.util.Pat
/**
*
*/
-public abstract class TraversingNodeDiffHandler extends NodeStateDiff {
+public abstract class TraversingNodeDiffHandler implements NodeStateDiff {
+
+ private final NodeStore store;
protected Stack<String> paths = new Stack<String>();
- public void start(NodeState before, NodeState after) {
- start(before, after, "/");
+ public TraversingNodeDiffHandler(NodeStore store) {
+ this.store = store;
}
public void start(NodeState before, NodeState after, String path) {
paths.clear();
paths.push(path);
- compare(before, after);
+ store.compare(before, after, this);
}
protected String getCurrentPath() {
@@ -45,7 +47,7 @@ public abstract class TraversingNodeDiff
public void childNodeChanged(
String name, NodeState before, NodeState after) {
paths.push(PathUtils.concat(getCurrentPath(), name));
- compare(before, after);
+ store.compare(before, after, this);
paths.pop();
}
Added: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/AbstractRevisionStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/AbstractRevisionStore.java?rev=1310234&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/AbstractRevisionStore.java (added)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/AbstractRevisionStore.java Fri Apr 6 08:44:58 2012
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.mk.store;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.jackrabbit.mk.model.ChildNodeEntry;
+import org.apache.jackrabbit.mk.model.Id;
+import org.apache.jackrabbit.mk.model.NodeState;
+import org.apache.jackrabbit.mk.model.NodeStateDiff;
+import org.apache.jackrabbit.mk.model.NodeStateEditor;
+import org.apache.jackrabbit.mk.model.PropertyState;
+import org.apache.jackrabbit.mk.model.StoredNode;
+
+/**
+ * Abstract base class for revision store implementations.
+ */
+abstract class AbstractRevisionStore implements RevisionStore {
+
+ @Override
+ public NodeState getNodeState(StoredNode node) {
+ return new StoredNodeAsState(node, this);
+ }
+
+ @Override
+ public Id getId(NodeState node) {
+ return ((StoredNodeAsState) node).getId();
+ }
+
+ @Override
+ public NodeState getRoot() {
+ Id id;
+ try {
+ id = getHeadCommitId();
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "Failed to access the head commit identifier", e);
+ }
+
+ try {
+ return getNodeState(getRootNode(id));
+ } catch (NotFoundException e) {
+ throw new IllegalStateException(
+ "Root node not found in revision " + id, e);
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "Failed to access the root node in revision " + id, e);
+ }
+ }
+
+ @Override
+ public NodeStateEditor branch(NodeState base) {
+ throw new UnsupportedOperationException(); // TODO
+ }
+
+ @Override
+ public NodeState merge(NodeStateEditor branch, NodeState target) {
+ throw new UnsupportedOperationException(); // TODO
+ }
+
+ @Override
+ public void compare(NodeState before, NodeState after, NodeStateDiff diff) {
+ compareProperties(before, after, diff);
+ compareChildNodes(before, after, diff);
+ }
+
+ /**
+ * Compares the properties of the given two node states.
+ *
+ * @param before node state before changes
+ * @param after node state after changes
+ * @param diff handler of node state differences
+ */
+ protected void compareProperties(
+ NodeState before, NodeState after, NodeStateDiff diff) {
+ Set<String> beforeProperties = new HashSet<String>();
+
+ for (PropertyState beforeProperty : before.getProperties()) {
+ String name = beforeProperty.getName();
+ PropertyState afterProperty = after.getProperty(name);
+ if (afterProperty == null) {
+ diff.propertyDeleted(beforeProperty);
+ } else {
+ beforeProperties.add(name);
+ if (!beforeProperty.equals(afterProperty)) {
+ diff.propertyChanged(beforeProperty, afterProperty);
+ }
+ }
+ }
+
+ for (PropertyState afterProperty : after.getProperties()) {
+ if (!beforeProperties.contains(afterProperty.getName())) {
+ diff.propertyAdded(afterProperty);
+ }
+ }
+ }
+
+ /**
+ * Compares the child nodes of the given two node states.
+ *
+ * @param before node state before changes
+ * @param after node state after changes
+ * @param diff handler of node state differences
+ */
+ protected void compareChildNodes(
+ NodeState before, NodeState after, NodeStateDiff diff) {
+ Set<String> beforeChildNodes = new HashSet<String>();
+
+ for (ChildNodeEntry beforeCNE : before.getChildNodeEntries(0, -1)) {
+ String name = beforeCNE.getName();
+ NodeState beforeChild = beforeCNE.getNode();
+ NodeState afterChild = after.getChildNode(name);
+ if (afterChild == null) {
+ diff.childNodeDeleted(name, beforeChild);
+ } else {
+ beforeChildNodes.add(name);
+ if (!beforeChild.equals(afterChild)) {
+ diff.childNodeChanged(name, beforeChild, afterChild);
+ }
+ }
+ }
+
+ for (ChildNodeEntry afterChild : after.getChildNodeEntries(0, -1)) {
+ String name = afterChild.getName();
+ if (!beforeChildNodes.contains(name)) {
+ diff.childNodeAdded(name, afterChild.getNode());
+ }
+ }
+ }
+
+}
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/CopyingGC.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/CopyingGC.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/CopyingGC.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/CopyingGC.java Fri Apr 6 08:44:58 2012
@@ -24,7 +24,6 @@ import org.apache.jackrabbit.mk.model.Ch
import org.apache.jackrabbit.mk.model.Id;
import org.apache.jackrabbit.mk.model.MutableCommit;
import org.apache.jackrabbit.mk.model.MutableNode;
-import org.apache.jackrabbit.mk.model.NodeState;
import org.apache.jackrabbit.mk.model.StoredCommit;
import org.apache.jackrabbit.mk.model.StoredNode;
@@ -36,8 +35,8 @@ import org.apache.jackrabbit.mk.model.St
* In the current design, the head revision and all the nodes it references are
* reachable.
*/
-public class CopyingGC implements RevisionStore {
-
+public class CopyingGC extends AbstractRevisionStore {
+
/**
* From store.
*/
@@ -134,14 +133,6 @@ public class CopyingGC implements Revisi
// ---------------------------------------------------------- RevisionStore
- public NodeState getNodeState(StoredNode node) {
- return new StoredNodeAsState(node, this);
- }
-
- public Id getId(NodeState node) {
- return ((StoredNodeAsState) node).getId();
- }
-
public StoredNode getNode(Id id) throws NotFoundException, Exception {
if (runState.get() == STARTED) {
try {
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/DefaultRevisionStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/DefaultRevisionStore.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/DefaultRevisionStore.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/DefaultRevisionStore.java Fri Apr 6 08:44:58 2012
@@ -25,7 +25,6 @@ import org.apache.jackrabbit.mk.model.Ch
import org.apache.jackrabbit.mk.model.Id;
import org.apache.jackrabbit.mk.model.MutableCommit;
import org.apache.jackrabbit.mk.model.MutableNode;
-import org.apache.jackrabbit.mk.model.NodeState;
import org.apache.jackrabbit.mk.model.StoredCommit;
import org.apache.jackrabbit.mk.model.StoredNode;
import org.apache.jackrabbit.mk.persistence.Persistence;
@@ -36,7 +35,8 @@ import org.apache.jackrabbit.mk.util.Sim
* Default revision store implementation, passing calls to a <code>Persistence</code>
* and a <code>BlobStore</code>, respectively and providing caching.
*/
-public class DefaultRevisionStore implements RevisionStore, Closeable {
+public class DefaultRevisionStore extends AbstractRevisionStore
+ implements Closeable {
public static final String CACHE_SIZE = "mk.cacheSize";
public static final int DEFAULT_CACHE_SIZE = 10000;
@@ -206,14 +206,6 @@ public class DefaultRevisionStore implem
//-----------------------------------------------------< RevisionProvider >
- public NodeState getNodeState(StoredNode node) {
- return new StoredNodeAsState(node, this);
- }
-
- public Id getId(NodeState node) {
- return ((StoredNodeAsState) node).getId();
- }
-
public StoredNode getNode(Id id) throws NotFoundException, Exception {
verifyInitialized();
@@ -277,4 +269,5 @@ public class DefaultRevisionStore implem
headLock.readLock().unlock();
}
}
+
}
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/RevisionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/RevisionProvider.java?rev=1310234&r1=1310233&r2=1310234&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/RevisionProvider.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/store/RevisionProvider.java Fri Apr 6 08:44:58 2012
@@ -19,13 +19,14 @@ package org.apache.jackrabbit.mk.store;
import org.apache.jackrabbit.mk.model.ChildNodeEntriesMap;
import org.apache.jackrabbit.mk.model.Id;
import org.apache.jackrabbit.mk.model.NodeState;
+import org.apache.jackrabbit.mk.model.NodeStore;
import org.apache.jackrabbit.mk.model.StoredCommit;
import org.apache.jackrabbit.mk.model.StoredNode;
/**
* Read operations.
*/
-public interface RevisionProvider {
+public interface RevisionProvider extends NodeStore {
/**
* Adapts the given {@link StoredNode} to a corresponding