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/07/20 11:08:20 UTC
svn commit: r1363687 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak:
kernel/KernelNodeStore.java plugins/memory/MemoryNodeStateBuilder.java
plugins/memory/MemoryNodeStore.java
Author: jukka
Date: Fri Jul 20 09:08:19 2012
New Revision: 1363687
URL: http://svn.apache.org/viewvc?rev=1363687&view=rev
Log:
OAK-167: Caching NodeStore implementation
Complete the MemoryNodeStore class
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/KernelNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStateBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.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=1363687&r1=1363686&r2=1363687&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 Jul 20 09:08:19 2012
@@ -20,18 +20,20 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.oak.api.CoreValueFactory;
-import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStateBuilder;
import org.apache.jackrabbit.oak.spi.commit.CommitEditor;
import org.apache.jackrabbit.oak.spi.commit.EmptyEditor;
import org.apache.jackrabbit.oak.spi.commit.EmptyObserver;
import org.apache.jackrabbit.oak.spi.commit.Observer;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.apache.jackrabbit.oak.spi.state.NodeStateBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.state.NodeStoreBranch;
/**
* {@code NodeStore} implementations against {@link MicroKernel}.
*/
-public class KernelNodeStore extends MemoryNodeStore {
+public class KernelNodeStore implements NodeStore {
/**
* The {@link MicroKernel} instance used to store the content tree.
@@ -98,6 +100,11 @@ public class KernelNodeStore extends Mem
}
@Override
+ public NodeStateBuilder getBuilder(NodeState base) {
+ return new MemoryNodeStateBuilder(base);
+ }
+
+ @Override
public CoreValueFactory getValueFactory() {
return new CoreValueFactoryImpl(kernel);
}
@@ -113,4 +120,5 @@ public class KernelNodeStore extends Mem
CommitEditor getCommitEditor() {
return editor;
}
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStateBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStateBuilder.java?rev=1363687&r1=1363686&r2=1363687&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStateBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStateBuilder.java Fri Jul 20 09:08:19 2012
@@ -29,7 +29,7 @@ import java.util.Map;
/**
* Basic in-memory node state builder.
*/
-class MemoryNodeStateBuilder implements NodeStateBuilder {
+public class MemoryNodeStateBuilder implements NodeStateBuilder {
private final NodeState base;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java?rev=1363687&r1=1363686&r2=1363687&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/MemoryNodeStore.java Fri Jul 20 09:08:19 2012
@@ -16,15 +16,28 @@
*/
package org.apache.jackrabbit.oak.plugins.memory;
+import java.util.concurrent.atomic.AtomicReference;
+
+import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.CoreValueFactory;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStateBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.state.NodeStoreBranch;
/**
- * Abstract node store base class with in-memory node state builder
- * functionality.
+ * Basic in-memory node store implementation. Useful as a base class for
+ * more complex functionality.
*/
-public abstract class MemoryNodeStore implements NodeStore {
+public class MemoryNodeStore implements NodeStore {
+
+ private final AtomicReference<NodeState> root =
+ new AtomicReference<NodeState>(MemoryNodeState.EMPTY_NODE);
+
+ @Override
+ public NodeState getRoot() {
+ return root.get();
+ }
@Override
public NodeStateBuilder getBuilder(NodeState base) {
@@ -34,4 +47,61 @@ public abstract class MemoryNodeStore im
return new MemoryNodeStateBuilder(base);
}
+ @Override
+ public NodeStoreBranch branch() {
+ return new MemoryNodeStoreBranch(root.get());
+ }
+
+ @Override
+ public CoreValueFactory getValueFactory() {
+ return MemoryValueFactory.INSTANCE;
+ }
+
+ private class MemoryNodeStoreBranch implements NodeStoreBranch {
+
+ private final NodeState base;
+
+ private volatile NodeState root;
+
+ public MemoryNodeStoreBranch(NodeState base) {
+ this.base = base;
+ this.root = base;
+ }
+
+ @Override
+ public NodeState getBase() {
+ return base;
+ }
+
+ @Override
+ public NodeState getRoot() {
+ return root;
+ }
+
+ @Override
+ public void setRoot(NodeState newRoot) {
+ this.root = newRoot;
+ }
+
+ @Override
+ public NodeState merge() throws CommitFailedException {
+ while (!MemoryNodeStore.this.root.compareAndSet(base, root)) {
+ // TODO: rebase();
+ throw new UnsupportedOperationException();
+ }
+ return root;
+ }
+
+ @Override
+ public boolean copy(String source, String target) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean move(String source, String target) {
+ throw new UnsupportedOperationException();
+ }
+
+ }
+
}