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 md...@apache.org on 2012/05/17 17:08:03 UTC

svn commit: r1339630 [2/2] - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/api/ oak-core/src/main/java/org/apache/jackrabbit/oak/core/ oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ oak-core/src/main/java/org/apac...

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java?rev=1339630&r1=1339629&r2=1339630&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/kernel/KernelNodeStoreTest.java Thu May 17 15:08:03 2012
@@ -22,11 +22,13 @@ import org.apache.jackrabbit.mk.api.Micr
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.CoreValue;
 import org.apache.jackrabbit.oak.core.AbstractOakTest;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeState;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.EmptyCommitHook;
 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;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -68,87 +70,119 @@ public class KernelNodeStoreTest extends
     }
 
     @Test
-    public void setRoot() throws CommitFailedException {
-        NodeState test = store.getRoot().getChildNode("test");
-        NodeStateBuilder testBuilder = store.getBuilder(test);
+    public void branch() throws CommitFailedException {
+        NodeStoreBranch branch = store.branch();
+
+        NodeStateBuilder rootBuilder = store.getBuilder(branch.getRoot());
+        NodeStateBuilder testBuilder = store.getBuilder(root.getChildNode("test"));
+
+        testBuilder.setNode("newNode", MemoryNodeState.EMPTY_NODE);
+        testBuilder.removeNode("x");
+
+        NodeStateBuilder newNodeBuilder = store.getBuilder(
+                testBuilder.getNodeState().getChildNode("newNode"));
 
-        NodeStateBuilder newNodeBuilder = testBuilder.addNode("newNode");
-        testBuilder.removeNode("a");
         CoreValue fortyTwo = store.getValueFactory().createValue(42);
         newNodeBuilder.setProperty("n", fortyTwo);
-        NodeState testState = testBuilder.getNodeState();
 
-        store.setRoot(testBuilder.getNodeState());
+        testBuilder.setNode("newNode", newNodeBuilder.getNodeState());
+        rootBuilder.setNode("test", testBuilder.getNodeState());
 
+        // Assert changes are present in the builder
+        NodeState testState = rootBuilder.getNodeState().getChildNode("test");
         assertNotNull(testState.getChildNode("newNode"));
-        assertNull(testState.getChildNode("a"));
+        assertNull(testState.getChildNode("x"));
         assertEquals(fortyTwo, testState.getChildNode("newNode").getProperty("n").getValue());
-        assertEquals(testState, store.getRoot().getChildNode("test"));
-    }
 
-    @Test
-    public void afterCommitHook() throws CommitFailedException {
-        NodeState test = store.getRoot().getChildNode("test");
-        NodeStateBuilder testBuilder = store.getBuilder(test);
+        // Assert changes are not yet present in the branch
+        testState = branch.getRoot().getChildNode("test");
+        assertNull(testState.getChildNode("newNode"));
+        assertNotNull(testState.getChildNode("x"));
 
-        NodeStateBuilder newNodeBuilder = testBuilder.addNode("newNode");
-        testBuilder.removeNode("a");
-        final CoreValue fortyTwo = store.getValueFactory().createValue(42);
-        newNodeBuilder.setProperty("n", fortyTwo);
-        final NodeState testState = testBuilder.getNodeState();
+        branch.setRoot(rootBuilder.getNodeState());
 
-        commitWithHook(testBuilder.getNodeState(), new EmptyCommitHook() {
-            @Override
-            public void afterCommit(NodeStore store, NodeState before, NodeState after) {
-                assertNull(before.getChildNode("newNode"));
-                assertNotNull(after.getChildNode("newNode"));
-                assertNull(after.getChildNode("a"));
-                assertEquals(fortyTwo, after.getChildNode("newNode").getProperty("n").getValue());
-                assertEquals(testState, after);
-            }
-        });
-    }
+        // Assert changes are present in the branch
+        testState = branch.getRoot().getChildNode("test");
+        assertNotNull(testState.getChildNode("newNode"));
+        assertNull(testState.getChildNode("x"));
+        assertEquals(fortyTwo, testState.getChildNode("newNode").getProperty("n").getValue());
 
-    @Test
-    public void beforeCommitHook() throws CommitFailedException {
-        NodeState test = store.getRoot().getChildNode("test");
-        NodeStateBuilder testBuilder = store.getBuilder(test);
+        // Assert changes are not yet present in the trunk
+        testState = store.getRoot().getChildNode("test");
+        assertNull(testState.getChildNode("newNode"));
+        assertNotNull(testState.getChildNode("x"));
 
-        NodeStateBuilder newNodeBuilder = testBuilder.addNode("newNode");
-        testBuilder.removeNode("a");
-        final CoreValue fortyTwo = store.getValueFactory().createValue(42);
-        newNodeBuilder.setProperty("n", fortyTwo);
+        branch.merge();
 
-        commitWithHook(testBuilder.getNodeState(), new EmptyCommitHook() {
-            @Override
-            public NodeState beforeCommit(NodeStore store, NodeState before, NodeState after) {
-                NodeStateBuilder afterBuilder = store.getBuilder(after);
-                afterBuilder.addNode("fromHook");
-                return afterBuilder.getNodeState();
-            }
-        });
-
-        test = store.getRoot().getChildNode("test");
-        assertNotNull(test.getChildNode("newNode"));
-        assertNotNull(test.getChildNode("fromHook"));
-        assertNull(test.getChildNode("a"));
-        assertEquals(fortyTwo, test.getChildNode("newNode").getProperty("n").getValue());
-        assertEquals(test, store.getRoot().getChildNode("test"));
+        // Assert changes are present in the trunk
+        testState = store.getRoot().getChildNode("test");
+        assertNotNull(testState.getChildNode("newNode"));
+        assertNull(testState.getChildNode("x"));
+        assertEquals(fortyTwo, testState.getChildNode("newNode").getProperty("n").getValue());
+    }
 
+    @Test  // TODO add afterCommitHook test (OAK-100)
+    public void afterCommitHook() throws CommitFailedException {
+//        NodeState test = store.getRoot().getChildNode("test");
+//        NodeStateBuilder testBuilder = store.getBuilder(test);
+//
+//        NodeStateBuilder newNodeBuilder = testBuilder.addNode("newNode");
+//        testBuilder.removeNode("a");
+//        final CoreValue fortyTwo = store.getValueFactory().createValue(42);
+//        newNodeBuilder.setProperty("n", fortyTwo);
+//        final NodeState testState = testBuilder.getNodeState();
+//
+//        commitWithHook(testBuilder.getNodeState(), new EmptyCommitHook() {
+//            @Override
+//            public void afterCommit(NodeStore store, NodeState before, NodeState after) {
+//                assertNull(before.getChildNode("newNode"));
+//                assertNotNull(after.getChildNode("newNode"));
+//                assertNull(after.getChildNode("a"));
+//                assertEquals(fortyTwo, after.getChildNode("newNode").getProperty("n").getValue());
+//                assertEquals(testState, after);
+//            }
+//        });
+    }
+
+    @Test // TODO add beforeCommitHook test (OAK-100)
+    public void beforeCommitHook() throws CommitFailedException {
+//        NodeState test = store.getRoot().getChildNode("test");
+//        NodeStateBuilder testBuilder = store.getBuilder(test);
+//
+//        NodeStateBuilder newNodeBuilder = testBuilder.addNode("newNode");
+//        testBuilder.removeNode("a");
+//        final CoreValue fortyTwo = store.getValueFactory().createValue(42);
+//        newNodeBuilder.setProperty("n", fortyTwo);
+//
+//        commitWithHook(testBuilder.getNodeState(), new EmptyCommitHook() {
+//            @Override
+//            public NodeState beforeCommit(NodeStore store, NodeState before, NodeState after) {
+//                NodeStateBuilder afterBuilder = store.getBuilder(after);
+//                afterBuilder.addNode("fromHook");
+//                return afterBuilder.getNodeState();
+//            }
+//        });
+//
+//        test = store.getRoot().getChildNode("test");
+//        assertNotNull(test.getChildNode("newNode"));
+//        assertNotNull(test.getChildNode("fromHook"));
+//        assertNull(test.getChildNode("a"));
+//        assertEquals(fortyTwo, test.getChildNode("newNode").getProperty("n").getValue());
+//        assertEquals(test, store.getRoot().getChildNode("test"));
     }
 
     //------------------------------------------------------------< private >---
 
     private void commitWithHook(NodeState nodeState, CommitHook commitHook)
             throws CommitFailedException {
-
-        commitHookDelegate.set(commitHook);
-        try {
-            store.setRoot(nodeState);
-        }
-        finally {
-            commitHookDelegate.set(new EmptyCommitHook());
-        }
+//
+//        commitHookDelegate.set(commitHook);
+//        try {
+//            store.branch(nodeState);
+//        }
+//        finally {
+//            commitHookDelegate.set(new EmptyCommitHook());
+//        }
     }
 
     private static class CommitHookDelegate implements CommitHook {

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java?rev=1339630&r1=1339629&r2=1339630&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java Thu May 17 15:08:03 2012
@@ -16,21 +16,6 @@
  */
 package org.apache.jackrabbit.oak.jcr;
 
-import java.io.IOException;
-
-import javax.annotation.CheckForNull;
-import javax.jcr.ItemExistsException;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.Workspace;
-import javax.jcr.lock.LockManager;
-import javax.jcr.nodetype.NodeTypeManager;
-import javax.jcr.query.QueryManager;
-import javax.jcr.version.VersionManager;
-
 import org.apache.jackrabbit.oak.api.AuthInfo;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.ContentSession;
@@ -47,6 +32,20 @@ import org.apache.jackrabbit.oak.namepat
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.annotation.CheckForNull;
+import javax.jcr.ItemExistsException;
+import javax.jcr.NamespaceRegistry;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.Workspace;
+import javax.jcr.lock.LockManager;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.query.QueryManager;
+import javax.jcr.version.VersionManager;
+import java.io.IOException;
+
 public class SessionDelegate {
     static final Logger log = LoggerFactory.getLogger(SessionDelegate.class);
 
@@ -58,9 +57,9 @@ public class SessionDelegate {
     private final NamespaceRegistry nsRegistry;
     private final Workspace workspace;
     private final Session session;
+    private final Root root;
 
     private boolean isAlive = true;
-    private Root root;
 
     SessionDelegate(Repository repository, ContentSession contentSession) throws RepositoryException {
         this.repository = repository;
@@ -134,7 +133,6 @@ public class SessionDelegate {
     public void save() throws RepositoryException {
         try {
             root.commit();
-            root = contentSession.getCurrentRoot();
         }
         catch (CommitFailedException e) {
             throw new RepositoryException(e);
@@ -146,7 +144,7 @@ public class SessionDelegate {
             root.rebase();
         }
         else {
-            root = contentSession.getCurrentRoot();
+            root.clear();
         }
     }