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 th...@apache.org on 2013/04/11 14:57:11 UTC

svn commit: r1466868 - in /jackrabbit/oak/trunk/oak-mongomk/src: main/java/org/apache/jackrabbit/mongomk/ test/java/org/apache/jackrabbit/mongomk/

Author: thomasm
Date: Thu Apr 11 12:57:11 2013
New Revision: 1466868

URL: http://svn.apache.org/r1466868
Log:
OAK-619 MongoMK: rename operations on documents

Modified:
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Commit.java
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MemoryDocumentStore.java
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoDocumentStore.java
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Node.java
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/UpdateOp.java
    jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoDocumentStoreTest.java
    jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/SimpleTest.java

Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Commit.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Commit.java?rev=1466868&r1=1466867&r2=1466868&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Commit.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Commit.java Thu Apr 11 12:57:11 2013
@@ -92,14 +92,14 @@ public class Commit {
     
     public void touchNode(String path) {
         UpdateOp op = getUpdateOperationForNode(path);
-        op.setMapEntry(UpdateOp.LAST_REV + "." + revision.getClusterId(), revision.toString());        
+        op.setMapEntry(UpdateOp.LAST_REV, "" + revision.getClusterId(), revision.toString());        
     }
     
     void updateProperty(String path, String propertyName, String value) {
         UpdateOp op = getUpdateOperationForNode(path);
         String key = Utils.escapePropertyName(propertyName);
-        op.addMapEntry(key + "." + revision.toString(), value);
-        op.setMapEntry(UpdateOp.LAST_REV + "." + revision.getClusterId(), revision.toString());        
+        op.setMapEntry(key, revision.toString(), value);
+        op.setMapEntry(UpdateOp.LAST_REV, "" + revision.getClusterId(), revision.toString());        
     }
 
     void addNode(Node n) {
@@ -175,14 +175,14 @@ public class Commit {
         UpdateOp commitRoot = getUpdateOperationForNode(commitRootPath);
         for (String p : operations.keySet()) {
             UpdateOp op = operations.get(p);
-            op.setMapEntry(UpdateOp.LAST_REV + "." + revision.getClusterId(), revision.toString());
+            op.setMapEntry(UpdateOp.LAST_REV, "" + revision.getClusterId(), revision.toString());
             if (op.isNew) {
-                op.addMapEntry(UpdateOp.DELETED + "." + revision.toString(), "false");
+                op.setMapEntry(UpdateOp.DELETED, revision.toString(), "false");
             }
             if (op == commitRoot) {
                 // apply at the end
             } else {
-                op.addMapEntry(UpdateOp.COMMIT_ROOT + "." + revision.toString(), commitRootDepth);
+                op.setMapEntry(UpdateOp.COMMIT_ROOT, revision.toString(), commitRootDepth);
                 if (op.isNew()) {
                     newNodes.add(op);
                 } else {
@@ -194,7 +194,7 @@ public class Commit {
             // no updates and root of commit is also new. that is,
             // it is the root of a subtree added in a commit.
             // so we try to add the root like all other nodes
-            commitRoot.addMapEntry(UpdateOp.REVISIONS + "." + revision.toString(), commitValue);
+            commitRoot.setMapEntry(UpdateOp.REVISIONS, revision.toString(), commitValue);
             newNodes.add(commitRoot);
         }
         try {
@@ -207,7 +207,7 @@ public class Commit {
                         if (op == commitRoot) {
                             // don't write the commit root just yet
                             // (because there might be a conflict)
-                            commitRoot.unset(UpdateOp.REVISIONS + "." + revision.toString());
+                            commitRoot.unsetMapEntry(UpdateOp.REVISIONS, revision.toString());
                         }
                         changedNodes.add(op);
                     }
@@ -216,7 +216,7 @@ public class Commit {
             }
             for (UpdateOp op : changedNodes) {
                 // set commit root on changed nodes
-                op.addMapEntry(UpdateOp.COMMIT_ROOT + "." + revision.toString(), commitRootDepth);
+                op.setMapEntry(UpdateOp.COMMIT_ROOT, revision.toString(), commitRootDepth);
                 done.add(op);
                 createOrUpdateNode(store, op);
             }
@@ -225,7 +225,7 @@ public class Commit {
             // first to check if there was a conflict, and only then to commit
             // the revision, with the revision property set)
             if (changedNodes.size() > 0 || !commitRoot.isNew) {
-                commitRoot.addMapEntry(UpdateOp.REVISIONS + "." + revision.toString(), commitValue);
+                commitRoot.setMapEntry(UpdateOp.REVISIONS, revision.toString(), commitValue);
                 done.add(commitRoot);
                 createOrUpdateNode(store, commitRoot);
                 operations.put(commitRootPath, commitRoot);
@@ -323,7 +323,7 @@ public class Commit {
                 // ok
             } else if (key.equals(UpdateOp.LAST_REV)) {
                 // only maintain the lastRev in the main document
-                main.setMapEntry(UpdateOp.LAST_REV + "." + revision.getClusterId(), revision.toString());        
+                main.setMap(UpdateOp.LAST_REV, "" + revision.getClusterId(), revision.toString());        
             } else {
                 // UpdateOp.DELETED,
                 // UpdateOp.REVISIONS,
@@ -341,9 +341,9 @@ public class Commit {
                     Revision propRev = Revision.fromString(r);
                     Object v = valueMap.get(r);
                     if (propRev.equals(latestRev)) {
-                        main.setMapEntry(key + "." + propRev.toString(), v);
+                        main.setMap(key, propRev.toString(), v);
                     } else {
-                        old.addMapEntry(key + "." + propRev.toString(), v);
+                        old.setMapEntry(key, propRev.toString(), v);
                     }
                 }
             }
@@ -431,8 +431,8 @@ public class Commit {
         removedNodes.add(path);
         UpdateOp op = getUpdateOperationForNode(path);
         op.setDelete(true);
-        op.addMapEntry(UpdateOp.DELETED + "." + revision.toString(), "true");
-        op.setMapEntry(UpdateOp.LAST_REV + "." + revision.getClusterId(), revision.toString());
+        op.setMapEntry(UpdateOp.DELETED, revision.toString(), "true");
+        op.setMapEntry(UpdateOp.LAST_REV, "" + revision.getClusterId(), revision.toString());
     }
 
 }

Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MemoryDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MemoryDocumentStore.java?rev=1466868&r1=1466867&r2=1466868&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MemoryDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MemoryDocumentStore.java Thu Apr 11 12:57:11 2013
@@ -164,7 +164,7 @@ public class MemoryDocumentStore impleme
                 target.put(k, ((Long) old) + x);
                 break;
             }
-            case ADD_MAP_ENTRY: {
+            case SET_MAP_ENTRY: {
                 Object old = target.get(kv[0]);
                 @SuppressWarnings("unchecked")
                 Map<String, Object> m = (Map<String, Object>) old;
@@ -184,7 +184,7 @@ public class MemoryDocumentStore impleme
                 }
                 break;
             }
-            case SET_MAP_ENTRY: {
+            case SET_MAP: {
                 Object old = target.get(kv[0]);
                 @SuppressWarnings("unchecked")
                 Map<String, Object> m = (Map<String, Object>) old;

Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoDocumentStore.java?rev=1466868&r1=1466867&r2=1466868&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/MongoDocumentStore.java Thu Apr 11 12:57:11 2013
@@ -226,7 +226,7 @@ public class MongoDocumentStore implemen
                     incUpdates.append(k, op.value);
                     break;
                 }
-                case ADD_MAP_ENTRY: {
+                case SET_MAP_ENTRY: {
                     setUpdates.append(k, op.value);
                     break;
                 }
@@ -234,7 +234,7 @@ public class MongoDocumentStore implemen
                     unsetUpdates.append(k, "1");
                     break;
                 }
-                case SET_MAP_ENTRY: {
+                case SET_MAP: {
                     String[] kv = k.split("\\.");
                     BasicDBObject sub = new BasicDBObject();
                     sub.put(kv[1], op.value);
@@ -309,8 +309,8 @@ public class MongoDocumentStore implemen
                         inserts[i].put(k, op.value);
                         break;
                     }
-                    case SET_MAP_ENTRY:
-                    case ADD_MAP_ENTRY: {
+                    case SET_MAP:
+                    case SET_MAP_ENTRY: {
                         String[] kv = k.split("\\.");
                         DBObject value = new BasicDBObject(kv[1], op.value);
                         inserts[i].put(kv[0], value);

Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Node.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Node.java?rev=1466868&r1=1466867&r2=1466868&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Node.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/Node.java Thu Apr 11 12:57:11 2013
@@ -74,11 +74,11 @@ public class Node {
         String id = Utils.getIdFromPath(path);
         UpdateOp op = new UpdateOp(path, id, isNew);
         op.set(UpdateOp.ID, id);
-        op.addMapEntry(UpdateOp.DELETED + "." + rev.toString(), "false");
-        op.setMapEntry(UpdateOp.LAST_REV + "." + rev.getClusterId(), rev.toString());
+        op.setMapEntry(UpdateOp.DELETED, rev.toString(), "false");
+        op.setMapEntry(UpdateOp.LAST_REV, "" + rev.getClusterId(), rev.toString());
         for (String p : properties.keySet()) {
             String key = Utils.escapePropertyName(p);
-            op.addMapEntry(key + "." + rev.toString(), properties.get(p));
+            op.setMapEntry(key, rev.toString(), properties.get(p));
         }
         return op;
     }

Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/UpdateOp.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/UpdateOp.java?rev=1466868&r1=1466867&r2=1466868&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/UpdateOp.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/UpdateOp.java Thu Apr 11 12:57:11 2013
@@ -106,33 +106,50 @@ public class UpdateOp {
     }
     
     /**
-     * Add a new map entry for this revision.
+     * Add a new or update an existing map entry.
+     * The property is a map of sub-names / values.
      * 
      * @param property the property
+     * @param subName the entry name
      * @param value the value
      */
-    void addMapEntry(String property, Object value) {
+    void setMapEntry(String property, String subName, Object value) {
         Operation op = new Operation();
-        op.type = Operation.Type.ADD_MAP_ENTRY;
+        op.type = Operation.Type.SET_MAP_ENTRY;
         op.value = value;
-        changes.put(property, op);
+        changes.put(property + "." + subName, op);
     }
     
-    public void removeMapEntry(String property) {
+    /**
+     * Remove a map entry.
+     * The property is a map of sub-names / values.
+     * 
+     * @param property the property
+     * @param subName the entry name
+     */
+    public void removeMapEntry(String property, String subName) {
         Operation op = new Operation();
         op.type = Operation.Type.REMOVE_MAP_ENTRY;
-        changes.put(property, op);
+        changes.put(property + "." + subName, op);
     }
     
-    public void setMapEntry(String property, Object value) {
+    /**
+     * Set a map to a single key-value pair.
+     * The property is a map of sub-names / values.
+     * 
+     * @param property the property
+     * @param subName the entry name
+     * @param value the value
+     */
+    public void setMap(String property, String subName, Object value) {
         Operation op = new Operation();
-        op.type = Operation.Type.SET_MAP_ENTRY;
+        op.type = Operation.Type.SET_MAP;
         op.value = value;
-        changes.put(property, op);
+        changes.put(property + "." + subName, op);
     }
     
     /**
-     * Set the property.
+     * Set the property to the given value.
      * 
      * @param property the property name
      * @param value the value
@@ -152,6 +169,17 @@ public class UpdateOp {
     void unset(String property) {
         changes.remove(property);
     }
+    
+    /**
+     * Do not set the property entry (after it has been set).
+     * The property is a map of sub-names / values.
+     * 
+     * @param property the property name
+     * @param subName the entry name
+     */
+    void unsetMapEntry(String property, String subName) {
+        changes.remove(property + "." + subName);
+    }
 
     /**
      * Increment the value.
@@ -218,7 +246,7 @@ public class UpdateOp {
              * Add the sub-key / value pair.
              * The value in the stored node is a map.
              */ 
-             ADD_MAP_ENTRY, 
+             SET_MAP_ENTRY, 
              
              /**
               * Remove the sub-key / value pair.
@@ -230,7 +258,7 @@ public class UpdateOp {
               * Set the sub-key / value pair.
               * The value in the stored node is a map.
               */
-             SET_MAP_ENTRY,
+             SET_MAP,
              
          }
              
@@ -259,10 +287,10 @@ public class UpdateOp {
                 break;
             case SET:
             case REMOVE_MAP_ENTRY:
-            case SET_MAP_ENTRY:
+            case SET_MAP:
                 // nothing to do
                 break;
-            case ADD_MAP_ENTRY:
+            case SET_MAP_ENTRY:
                 reverse = new Operation();
                 reverse.type = Type.REMOVE_MAP_ENTRY;
                 break;

Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoDocumentStoreTest.java?rev=1466868&r1=1466867&r2=1466868&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/MongoDocumentStoreTest.java Thu Apr 11 12:57:11 2013
@@ -69,7 +69,7 @@ public class MongoDocumentStoreTest {
         DocumentStore docStore = openDocumentStore();
 
         UpdateOp updateOp = new UpdateOp("/", "/", true);
-        updateOp.addMapEntry("property1.key1", "value1");
+        updateOp.setMapEntry("property1", "key1", "value1");
         updateOp.increment("property2", 1);
         updateOp.set("property3", "value3");
         docStore.createOrUpdate(Collection.NODES, updateOp);
@@ -102,7 +102,7 @@ public class MongoDocumentStoreTest {
             String path = "/node" + i;
             UpdateOp updateOp = new UpdateOp(path, path, true);
             updateOp.set(UpdateOp.ID, "/node" + i);
-            updateOp.addMapEntry("property1.key1", "value1");
+            updateOp.setMapEntry("property1", "key1", "value1");
             updateOp.increment("property2", 1);
             updateOp.set("property3", "value3");
             updateOps.add(updateOp);
@@ -214,7 +214,7 @@ public class MongoDocumentStoreTest {
             for (int i = 0; i < nNodes; i++) {
                 String path = "/" + nodeName + i;
                 UpdateOp updateOp = new UpdateOp(path, path, true);
-                updateOp.addMapEntry("property1.key1", "value1");
+                updateOp.setMapEntry("property1", "key1", "value1");
                 updateOp.set("property3", "value3");
                 docStore.createOrUpdate(Collection.NODES, updateOp);
             }
@@ -224,7 +224,7 @@ public class MongoDocumentStoreTest {
             for (int i = 0; i < nNodes; i++) {
                 String path = "/" + nodeName + i;
                 UpdateOp updateOp = new UpdateOp(path, path, false);
-                updateOp.addMapEntry("property1.key2", "value2");
+                updateOp.setMapEntry("property1", "key2", "value2");
                 updateOp.set("property4", "value4");
                 docStore.createOrUpdate(Collection.NODES, updateOp);
             }

Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/SimpleTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/SimpleTest.java?rev=1466868&r1=1466867&r2=1466868&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/SimpleTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/SimpleTest.java Thu Apr 11 12:57:11 2013
@@ -27,6 +27,7 @@ import java.util.Map;
 import org.apache.jackrabbit.mk.api.MicroKernelException;
 import org.apache.jackrabbit.mongomk.DocumentStore.Collection;
 import org.apache.jackrabbit.mongomk.Node.Children;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.google.common.collect.Lists;
@@ -86,7 +87,7 @@ public class SimpleTest {
         n.setProperty("name", "Hello");
         UpdateOp op = n.asOperation(true);
         // mark as commit root
-        op.addMapEntry(UpdateOp.REVISIONS + "." + rev, "true");
+        op.setMapEntry(UpdateOp.REVISIONS, rev.toString(), "true");
         DocumentStore s = mk.getDocumentStore();
         assertTrue(s.create(Collection.NODES, Lists.newArrayList(op)));
         Node n2 = mk.getNode("/test", rev);
@@ -268,7 +269,7 @@ public class SimpleTest {
     }
 
     @Test
-    public void testDeletion() {
+    public void delete() {
         MongoMK mk = createMK();
 
         mk.commit("/", "+\"testDel\":{\"name\": \"Hello\"}", null, null);
@@ -289,6 +290,31 @@ public class SimpleTest {
         Node n = mk.getNode("/testDel", Revision.fromString(r3));
         assertNull(n);
     }
+    
+    @Test
+    @Ignore
+    // OAK-771 (WIP)
+    public void nodeAndPropertyNames() {
+        MongoMK mk = createMK();
+
+        mk.commit("/", "+\"0\":{\"name\": \"Hello\"}", null, null);
+        mk.commit("/testDel", "+\"a\":{\"name\": \"World\"}", null, null);
+        mk.commit("/testDel", "+\"b\":{\"name\": \"!\"}", null, null);
+        String r1 = mk.commit("/testDel", "+\"c\":{\"name\": \"!\"}", null, null);
+
+        Children c = mk.getChildren("/testDel", Revision.fromString(r1),
+                Integer.MAX_VALUE);
+        assertEquals(3, c.children.size());
+
+        String r2 = mk.commit("/testDel", "-\"c\"", null, null);
+        c = mk.getChildren("/testDel", Revision.fromString(r2),
+                Integer.MAX_VALUE);
+        assertEquals(2, c.children.size());
+
+        String r3 = mk.commit("/", "-\"testDel\"", null, null);
+        Node n = mk.getNode("/testDel", Revision.fromString(r3));
+        assertNull(n);
+    }
 
     @Test
     public void addAndMove() {