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/02/26 17:07:08 UTC
svn commit: r1450247 - in /jackrabbit/oak/trunk/oak-mongomk/src:
main/java/org/apache/jackrabbit/mongomk/prototype/
test/java/org/apache/jackrabbit/mongomk/prototype/
Author: thomasm
Date: Tue Feb 26 16:07:08 2013
New Revision: 1450247
URL: http://svn.apache.org/r1450247
Log:
OAK-619 Lock-free MongoMK implementation (move old revisions into a separate document)
Modified:
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Commit.java
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MemoryDocumentStore.java
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStore.java
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Node.java
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/UpdateOp.java
jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Utils.java
jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStoreTest.java
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Commit.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Commit.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Commit.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Commit.java Tue Feb 26 16:07:08 2013
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
+import java.util.Map.Entry;
import org.apache.jackrabbit.mk.api.MicroKernelException;
import org.apache.jackrabbit.mk.json.JsopStream;
@@ -32,6 +33,9 @@ import org.apache.jackrabbit.oak.commons
*/
public class Commit {
+ // TODO too small
+ private static final int MAX_MAP_SIZE = 16 * 1024;
+
private final MongoMK mk;
private final Revision revision;
private HashMap<String, UpdateOp> operations = new HashMap<String, UpdateOp>();
@@ -72,9 +76,9 @@ public class Commit {
void updateProperty(String path, String propertyName, String value) {
UpdateOp op = getUpdateOperationForNode(path);
- op.addMapEntry(propertyName, revision.toString(), value);
+ op.addMapEntry(propertyName + "." + revision.toString(), value);
long increment = mk.getWriteCountIncrement(path);
- op.increment("_writeCount", 1 + increment);
+ op.increment(UpdateOp.WRITE_COUNT, 1 + increment);
}
void addNode(Node n) {
@@ -137,8 +141,8 @@ public class Commit {
}
if (root != null) {
long increment = mk.getWriteCountIncrement(commitRoot);
- root.increment("_writeCount", 1 + increment);
- root.addMapEntry("_revisions", revision.toString(), "true");
+ root.increment(UpdateOp.WRITE_COUNT, 1 + increment);
+ root.addMapEntry(UpdateOp.REVISIONS + "." + revision.toString(), "true");
createOrUpdateNode(store, root);
operations.put(commitRoot, root);
}
@@ -146,8 +150,20 @@ public class Commit {
private void createOrUpdateNode(DocumentStore store, UpdateOp op) {
Map<String, Object> map = store.createOrUpdate(Collection.NODES, op);
+ int size = Utils.getMapSize(map);
+ if (size > MAX_MAP_SIZE) {
+ UpdateOp[] split = splitDocument(map);
+
+ // TODO check if the new main document is actually smaller;
+ // otherwise, splitting doesn't make sense
+
+ // the old version
+ store.createOrUpdate(Collection.NODES, split[0]);
+ // the (shrunken) main document
+ store.createOrUpdate(Collection.NODES, split[1]);
+ }
// TODO detect conflicts here
- Long count = (Long) map.get("_writeCount");
+ Long count = (Long) map.get(UpdateOp.WRITE_COUNT);
if (count == null) {
count = 0L;
}
@@ -155,6 +171,56 @@ public class Commit {
writeCounts.put(path, count);
}
+ private UpdateOp[] splitDocument(Map<String, Object> map) {
+ String path = (String) map.get(UpdateOp.PATH);
+ String id = (String) map.get(UpdateOp.ID);
+ Long previous = (Long) map.get(UpdateOp.PREVIOUS);
+ if (previous == null) {
+ previous = 0L;
+ } else {
+ previous++;
+ }
+ UpdateOp old = new UpdateOp(path, id + "/" + previous, true);
+ UpdateOp main = new UpdateOp(path, id, false);
+ main.set(UpdateOp.PREVIOUS, previous);
+ for (Entry<String, Object> e : map.entrySet()) {
+ String key = e.getKey();
+ if (key.equals(UpdateOp.PATH)) {
+ // ok
+ } else if (key.equals(UpdateOp.ID)) {
+ // ok
+ } else if (key.equals(UpdateOp.PREVIOUS)) {
+ // ok
+ } else if (key.equals(UpdateOp.WRITE_COUNT)) {
+ // only maintain the write count on the main document
+ main.set(UpdateOp.WRITE_COUNT, e.getValue());
+ } else {
+ // UpdateOp.DELETED,
+ // UpdateOp.REVISIONS,
+ // and regular properties
+ @SuppressWarnings("unchecked")
+ Map<String, Object> valueMap = (Map<String, Object>) e.getValue();
+ Revision latestRev = null;
+ for (String r : valueMap.keySet()) {
+ Revision propRev = Revision.fromString(r);
+ if (latestRev == null || mk.isRevisionNewer(propRev, latestRev)) {
+ latestRev = propRev;
+ }
+ }
+ for (String r : valueMap.keySet()) {
+ Revision propRev = Revision.fromString(r);
+ Object v = valueMap.get(r);
+ if (propRev.equals(latestRev)) {
+ main.setMapEntry(key + "." + propRev.toString(), v);
+ } else {
+ old.addMapEntry(key + "." + propRev.toString(), v);
+ }
+ }
+ }
+ }
+ return new UpdateOp[]{old, main};
+ }
+
/**
* Apply the changes to the MongoMK (to update the cache).
*/
@@ -198,7 +264,7 @@ public class Commit {
writeCountInc++;
String id = Node.convertPathToDocumentId(path);
Map<String, Object> map = mk.getDocumentStore().find(Collection.NODES, id);
- Long oldWriteCount = (Long) map.get("_writeCount");
+ Long oldWriteCount = (Long) map.get(UpdateOp.WRITE_COUNT);
writeCount = oldWriteCount == null ? 0 : oldWriteCount;
}
}
@@ -238,9 +304,9 @@ public class Commit {
public void removeNode(String path) {
removedNodes.add(path);
UpdateOp op = getUpdateOperationForNode(path);
- op.addMapEntry("_deleted", revision.toString(), "true");
+ op.addMapEntry(UpdateOp.DELETED + "." + revision.toString(), "true");
long increment = mk.getWriteCountIncrement(path);
- op.increment("_writeCount", 1 + increment);
+ op.increment(UpdateOp.WRITE_COUNT, 1 + increment);
}
}
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MemoryDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MemoryDocumentStore.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MemoryDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MemoryDocumentStore.java Tue Feb 26 16:07:08 2013
@@ -131,7 +131,7 @@ public class MemoryDocumentStore impleme
public static void applyChanges(Map<String, Object> target, UpdateOp update) {
for (Entry<String, Operation> e : update.changes.entrySet()) {
String k = e.getKey();
- Object old = target.get(k);
+ String[] kv = k.split("\\.");
Operation op = e.getValue();
switch (op.type) {
case SET: {
@@ -139,6 +139,7 @@ public class MemoryDocumentStore impleme
break;
}
case INCREMENT: {
+ Object old = target.get(k);
Long x = (Long) op.value;
if (old == null) {
old = 0L;
@@ -147,23 +148,30 @@ public class MemoryDocumentStore impleme
break;
}
case ADD_MAP_ENTRY: {
+ Object old = target.get(kv[0]);
@SuppressWarnings("unchecked")
Map<String, String> m = (Map<String, String>) old;
if (m == null) {
m = Utils.newMap();
- target.put(k, m);
+ target.put(kv[0], m);
}
- m.put(op.subKey.toString(), op.value.toString());
+ m.put(kv[1], op.value.toString());
break;
}
case REMOVE_MAP_ENTRY: {
+ Object old = target.get(kv[0]);
@SuppressWarnings("unchecked")
Map<String, String> m = (Map<String, String>) old;
if (m != null) {
- m.remove(op.subKey.toString());
+ m.remove(kv[1]);
}
break;
}
+ case SET_MAP_ENTRY: {
+ Map<String, String> m = Utils.newMap();
+ target.put(k, m);
+ break;
+ }
}
}
}
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStore.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStore.java Tue Feb 26 16:07:08 2013
@@ -39,8 +39,6 @@ import com.mongodb.WriteResult;
* A document store that uses MongoDB as the backend.
*/
public class MongoDocumentStore implements DocumentStore {
-
- public static final String KEY_PATH = "_id";
private static final boolean LOG = false;
private static final boolean LOG_TIME = true;
@@ -105,7 +103,7 @@ public class MongoDocumentStore implemen
String fromKey, String toKey, int limit) {
log("query", fromKey, toKey, limit);
DBCollection dbCollection = getDBCollection(collection);
- QueryBuilder queryBuilder = QueryBuilder.start(KEY_PATH);
+ QueryBuilder queryBuilder = QueryBuilder.start(UpdateOp.ID);
queryBuilder.greaterThanEquals(fromKey);
queryBuilder.lessThan(toKey);
DBObject query = queryBuilder.get();
@@ -116,7 +114,7 @@ public class MongoDocumentStore implemen
for (int i = 0; i < limit && cursor.hasNext(); i++) {
DBObject o = cursor.next();
Map<String, Object> map = convertFromDBObject(o);
- String path = (String) map.get("_id");
+ String path = (String) map.get(UpdateOp.ID);
synchronized (cache) {
cache.put(path, map);
}
@@ -167,13 +165,20 @@ public class MongoDocumentStore implemen
break;
}
case ADD_MAP_ENTRY: {
- setUpdates.append(k + "." + op.subKey.toString(), op.value.toString());
+ setUpdates.append(k, op.value.toString());
break;
}
case REMOVE_MAP_ENTRY: {
// TODO
break;
}
+ case SET_MAP_ENTRY: {
+ String[] kv = k.split("\\.");
+ BasicDBObject sub = new BasicDBObject();
+ sub.put(kv[1], op.value.toString());
+ setUpdates.append(kv[0], sub);
+ break;
+ }
}
}
@@ -196,10 +201,11 @@ public class MongoDocumentStore implemen
null /*sort*/, false /*remove*/, update, true /*returnNew*/,
true /*upsert*/);
Map<String, Object> map = convertFromDBObject(oldNode);
- String path = (String) map.get("_id");
+ String path = (String) map.get(UpdateOp.ID);
synchronized (cache) {
cache.put(path, map);
}
+ log("createOrUpdate returns ", map);
return map;
} catch (Exception e) {
throw new MicroKernelException(e);
@@ -232,14 +238,15 @@ public class MongoDocumentStore implemen
inserts[i].put(k, op.value);
break;
}
+ case SET_MAP_ENTRY:
case ADD_MAP_ENTRY: {
- DBObject value = new BasicDBObject(op.subKey.toString(), op.value.toString());
- inserts[i].put(k, value);
+ String[] kv = k.split("\\.");
+ DBObject value = new BasicDBObject(kv[1], op.value.toString());
+ inserts[i].put(kv[0], value);
break;
}
case REMOVE_MAP_ENTRY: {
- // TODO
- break;
+ // nothing to do for new entries
}
}
}
@@ -254,7 +261,7 @@ public class MongoDocumentStore implemen
}
synchronized (cache) {
for (Map<String, Object> map : maps) {
- String path = (String) map.get("_id");
+ String path = (String) map.get(UpdateOp.ID);
synchronized (cache) {
cache.put(path, map);
}
@@ -278,9 +285,14 @@ public class MongoDocumentStore implemen
private static Map<String, Object> convertFromDBObject(DBObject n) {
Map<String, Object> copy = Utils.newMap();
if (n != null) {
- synchronized (n) {
- for (String key : n.keySet()) {
- copy.put(key, n.get(key));
+ for (String key : n.keySet()) {
+ Object o = n.get(key);
+ if (o instanceof String) {
+ copy.put(key, o);
+ } else if (o instanceof Long) {
+ copy.put(key, o);
+ } else if (o instanceof BasicDBObject) {
+ copy.put(key, o);
}
}
}
@@ -297,7 +309,7 @@ public class MongoDocumentStore implemen
}
private static DBObject getByPathQuery(String path) {
- return QueryBuilder.start(KEY_PATH).is(path).get();
+ return QueryBuilder.start(UpdateOp.ID).is(path).get();
}
@Override
@@ -310,7 +322,11 @@ public class MongoDocumentStore implemen
private static void log(Object... args) {
if (LOG) {
- System.out.println(Arrays.toString(args));
+ String msg = Arrays.toString(args);
+ if (msg.length() > 10000) {
+ msg = msg.length() + ": " + msg;
+ }
+ System.out.println(msg);
}
}
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/MongoMK.java Tue Feb 26 16:07:08 2013
@@ -211,7 +211,7 @@ public class MongoMK implements MicroKer
return x.compareRevisionTime(requestRevision) >= 0;
}
- private boolean isRevisionNewer(Revision x, Revision previous) {
+ boolean isRevisionNewer(Revision x, Revision previous) {
// TODO currently we only compare the timestamps
return x.compareRevisionTime(previous) >= 0;
}
@@ -236,7 +236,7 @@ public class MongoMK implements MicroKer
continue;
}
// TODO put the whole node in the cache
- String id = e.get("_id").toString();
+ String id = e.get(UpdateOp.ID).toString();
String p = id.substring(2);
c.children.add(p);
}
@@ -257,7 +257,7 @@ public class MongoMK implements MicroKer
Long w = writeCountIncrements.get(path);
long writeCount = w == null ? 0 : w;
for (String key : map.keySet()) {
- if (key.equals("_writeCount")) {
+ if (key.equals(UpdateOp.WRITE_COUNT)) {
writeCount += (Long) map.get(key);
}
if (key.startsWith("_")) {
@@ -508,7 +508,7 @@ public class MongoMK implements MicroKer
private boolean isDeleted(Map<String, Object> nodeProps, Revision rev) {
@SuppressWarnings("unchecked")
Map<String, String> valueMap = (Map<String, String>) nodeProps
- .get("_deleted");
+ .get(UpdateOp.DELETED);
if (valueMap != null) {
for (Map.Entry<String, String> e : valueMap.entrySet()) {
// TODO What if multiple revisions are there?. Should we sort
@@ -524,7 +524,7 @@ public class MongoMK implements MicroKer
}
return false;
}
-
+
private static String stripBranchRevMarker(String revisionId){
if(revisionId.startsWith("b")){
return revisionId.substring(1);
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Node.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Node.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Node.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Node.java Tue Feb 26 16:07:08 2013
@@ -68,12 +68,9 @@ public class Node {
UpdateOp asOperation(boolean isNew) {
String id = convertPathToDocumentId(path);
UpdateOp op = new UpdateOp(path, id, isNew);
- op.set("_id", id);
- if (!isNew) {
- op.increment("_changeCount", 1L);
- }
+ op.set(UpdateOp.ID, id);
for (String p : properties.keySet()) {
- op.addMapEntry(p, rev.toString(), properties.get(p));
+ op.addMapEntry(p + "." + rev.toString(), properties.get(p));
}
return op;
}
@@ -101,8 +98,9 @@ public class Node {
*/
private static boolean filter(String key) {
//TODO We need to move node properties to a sub key
- //so that all other top level props can be considered as
- //system generated and handled in a better way
+ // so that all other top level props can be considered as
+ // system generated and handled in a better way,
+ // or escape properties that start with a _
return key.startsWith("_");
}
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/UpdateOp.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/UpdateOp.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/UpdateOp.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/UpdateOp.java Tue Feb 26 16:07:08 2013
@@ -24,6 +24,13 @@ import java.util.TreeMap;
*/
public class UpdateOp {
+ static final String ID = "_id";
+ static final String PATH = "_path";
+ static final String WRITE_COUNT = "_writeCount";
+ static final String REVISIONS = "_revisions";
+ static final String PREVIOUS = "_prev";
+ static final String DELETED = "_deleted";
+
final String path;
final String key;
@@ -61,10 +68,22 @@ public class UpdateOp {
* @param property the property
* @param value the value
*/
- void addMapEntry(String property, String subKey, Object value) {
+ void addMapEntry(String property, Object value) {
Operation op = new Operation();
op.type = Operation.Type.ADD_MAP_ENTRY;
- op.subKey = subKey;
+ op.value = value;
+ changes.put(property, op);
+ }
+
+ public void removeMapEntry(String property) {
+ Operation op = new Operation();
+ op.type = Operation.Type.REMOVE_MAP_ENTRY;
+ changes.put(property, op);
+ }
+
+ public void setMapEntry(String property, Object value) {
+ Operation op = new Operation();
+ op.type = Operation.Type.SET_MAP_ENTRY;
op.value = value;
changes.put(property, op);
}
@@ -142,7 +161,14 @@ public class UpdateOp {
* Remove the sub-key / value pair.
* The value in the stored node is a map.
*/
- REMOVE_MAP_ENTRY
+ REMOVE_MAP_ENTRY,
+
+ /**
+ * Set the sub-key / value pair.
+ * The value in the stored node is a map.
+ */
+ SET_MAP_ENTRY,
+
}
@@ -152,17 +178,12 @@ public class UpdateOp {
Type type;
/**
- * The sub-key.
- */
- Object subKey;
-
- /**
* The value, if any.
*/
Object value;
public String toString() {
- return type + ": " + subKey + " = " + value;
+ return type + " " + value;
}
}
Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Utils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Utils.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Utils.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/Utils.java Tue Feb 26 16:07:08 2013
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.mongomk.prototype;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.TreeMap;
/**
@@ -31,5 +32,22 @@ public class Utils {
static <K, V> Map<K, V> newMap() {
return new TreeMap<K, V>();
}
+
+ @SuppressWarnings("unchecked")
+ public static int getMapSize(Map<String, Object> map) {
+ int size = 0;
+ for (Entry<String, Object> e : map.entrySet()) {
+ size += e.getKey().length();
+ Object o = e.getValue();
+ if (o instanceof String) {
+ size += o.toString().length();
+ } else if (o instanceof Long) {
+ size += 8;
+ } else if (o instanceof Map) {
+ size += 8 + getMapSize((Map<String, Object>) o);
+ }
+ }
+ return size;
+ }
}
Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStoreTest.java?rev=1450247&r1=1450246&r2=1450247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoDocumentStoreTest.java Tue Feb 26 16:07:08 2013
@@ -64,7 +64,7 @@ public class MongoDocumentStoreTest {
DocumentStore docStore = openDocumentStore();
UpdateOp updateOp = new UpdateOp("/", "/", true);
- updateOp.addMapEntry("property1", "key1", "value1");
+ updateOp.addMapEntry("property1.key1", "value1");
updateOp.increment("property2", 1);
updateOp.set("property3", "value3");
docStore.createOrUpdate(Collection.NODES, updateOp);
@@ -96,8 +96,8 @@ public class MongoDocumentStoreTest {
for (int i = 0; i < nUpdates; i++) {
String path = "/node" + i;
UpdateOp updateOp = new UpdateOp(path, path, true);
- updateOp.set(MongoDocumentStore.KEY_PATH, "/node" + i);
- updateOp.addMapEntry("property1", "key1", "value1");
+ updateOp.set(UpdateOp.ID, "/node" + i);
+ updateOp.addMapEntry("property1.key1", "value1");
updateOp.increment("property2", 1);
updateOp.set("property3", "value3");
updateOps.add(updateOp);
@@ -212,7 +212,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.addMapEntry("property1.key1", "value1");
updateOp.set("property3", "value3");
docStore.createOrUpdate(Collection.NODES, updateOp);
}
@@ -222,7 +222,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.addMapEntry("property1.key2", "value2");
updateOp.set("property4", "value4");
docStore.createOrUpdate(Collection.NODES, updateOp);
}