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 mr...@apache.org on 2013/08/14 14:45:23 UTC
svn commit: r1513849 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/mongomk/
main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/
test/java/org/apache/jackrabbit/oak/plugins/mongomk/
Author: mreutegg
Date: Wed Aug 14 12:45:22 2013
New Revision: 1513849
URL: http://svn.apache.org/r1513849
Log:
OAK-926: MongoMK: split documents when they are too large
- introduce document type
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Document.java (with props)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/ClusterNodeInfo.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MemoryDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/LoggingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/TimingDocumentStoreWrapper.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStoreTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/ClusterNodeInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/ClusterNodeInfo.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/ClusterNodeInfo.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/ClusterNodeInfo.java Wed Aug 14 12:45:22 2013
@@ -22,7 +22,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import org.apache.jackrabbit.mk.api.MicroKernelException;
@@ -181,11 +180,11 @@ public class ClusterNodeInfo {
private static ClusterNodeInfo createInstance(DocumentStore store, String machineId, String instanceId) {
long now = System.currentTimeMillis();
// keys between "0" and "a" includes all possible numbers
- List<Map<String, Object>> list = store.query(DocumentStore.Collection.CLUSTER_NODES,
+ List<Document> list = store.query(DocumentStore.Collection.CLUSTER_NODES,
"0", "a", Integer.MAX_VALUE);
int clusterNodeId = 0;
int maxId = 0;
- for (Map<String, Object> doc : list) {
+ for (Document doc : list) {
String key = "" + doc.get(ID_KEY);
int id;
try {
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Document.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Document.java?rev=1513849&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Document.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Document.java Wed Aug 14 12:45:22 2013
@@ -0,0 +1,29 @@
+/*
+ * 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.oak.plugins.mongomk;
+
+import java.util.TreeMap;
+
+/**
+ * A document corresponds to a node stored in the MongoMK. A document contains
+ * all the revisions of a node stored in the {@link DocumentStore}.
+ */
+public class Document extends TreeMap<String, Object> {
+
+ private static final long serialVersionUID = -2428664083360273697L;
+
+}
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Document.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/Document.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentStore.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/DocumentStore.java Wed Aug 14 12:45:22 2013
@@ -69,30 +69,30 @@ public interface DocumentStore {
/**
* Get a document.
* <p>
- * The returned map is a clone (the caller can modify it without affecting
+ * The returned document is a clone (the caller can modify it without affecting
* the stored version).
*
* @param collection the collection
* @param key the key
- * @return the map, or null if not found
+ * @return the document, or null if not found
*/
@CheckForNull
- Map<String, Object> find(Collection collection, String key);
+ Document find(Collection collection, String key);
/**
* Get a document, ignoring the cache if the cached entry is older than the
* specified time.
* <p>
- * The returned map is a clone (the caller can modify it without affecting
+ * The returned document is a clone (the caller can modify it without affecting
* the stored version).
*
* @param collection the collection
* @param key the key
* @param maxCacheAge the maximum age of the cached document
- * @return the map, or null if not found
+ * @return the document, or null if not found
*/
@CheckForNull
- Map<String, Object> find(Collection collection, String key, int maxCacheAge);
+ Document find(Collection collection, String key, int maxCacheAge);
/**
* Get a list of documents where the key is greater than a start value and
@@ -105,8 +105,10 @@ public interface DocumentStore {
* @return the list (possibly empty)
*/
@Nonnull
- List<Map<String, Object>> query(Collection collection, String fromKey,
- String toKey, int limit);
+ List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ int limit);
/**
* Get a list of documents where the key is greater than a start value and
@@ -121,8 +123,12 @@ public interface DocumentStore {
* @return the list (possibly empty)
*/
@Nonnull
- List<Map<String, Object>> query(Collection collection, String fromKey,
- String toKey, String indexedProperty, long startValue, int limit);
+ List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ String indexedProperty,
+ long startValue,
+ int limit);
/**
* Remove a document.
@@ -151,7 +157,7 @@ public interface DocumentStore {
* @throws MicroKernelException if the operation failed.
*/
@Nonnull
- Map<String, Object> createOrUpdate(Collection collection, UpdateOp update)
+ Document createOrUpdate(Collection collection, UpdateOp update)
throws MicroKernelException;
/**
@@ -159,13 +165,14 @@ public interface DocumentStore {
* {@link UpdateOp.Operation.Type#CONTAINS_MAP_ENTRY} and only updates the
* document if the condition is <code>true</code>.
*
+ *
* @param collection the collection
* @param update the update operation with the condition
* @return the old document or <code>null</code> if the condition is not met.
* @throws MicroKernelException if the operation failed.
*/
@CheckForNull
- Map<String, Object> findAndUpdate(Collection collection, UpdateOp update)
+ Document findAndUpdate(Collection collection, UpdateOp update)
throws MicroKernelException;
/**
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MemoryDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MemoryDocumentStore.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MemoryDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MemoryDocumentStore.java Wed Aug 14 12:45:22 2013
@@ -39,57 +39,64 @@ public class MemoryDocumentStore impleme
/**
* The 'nodes' collection.
*/
- private ConcurrentSkipListMap<String, Map<String, Object>> nodes =
- new ConcurrentSkipListMap<String, Map<String, Object>>();
+ private ConcurrentSkipListMap<String, Document> nodes =
+ new ConcurrentSkipListMap<String, Document>();
/**
* The 'clusterNodes' collection.
*/
- private ConcurrentSkipListMap<String, Map<String, Object>> clusterNodes =
- new ConcurrentSkipListMap<String, Map<String, Object>>();
+ private ConcurrentSkipListMap<String, Document> clusterNodes =
+ new ConcurrentSkipListMap<String, Document>();
@Override
- public Map<String, Object> find(Collection collection, String key, int maxCacheAge) {
+ public Document find(Collection collection, String key, int maxCacheAge) {
return find(collection, key);
}
@Override
- public Map<String, Object> find(Collection collection, String key) {
- ConcurrentSkipListMap<String, Map<String, Object>> map = getMap(collection);
- Map<String, Object> n = map.get(key);
- if (n == null) {
+ public Document find(Collection collection, String key) {
+ ConcurrentSkipListMap<String, Document> map = getMap(collection);
+ Document doc = map.get(key);
+ if (doc == null) {
return null;
}
- Map<String, Object> copy = Utils.newMap();
- synchronized (n) {
- Utils.deepCopyMap(n, copy);
+ Document copy = Utils.newDocument();
+ synchronized (doc) {
+ Utils.deepCopyMap(doc, copy);
}
return copy;
}
@Override
@Nonnull
- public List<Map<String, Object>> query(Collection collection, String fromKey, String toKey, int limit) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ int limit) {
return query(collection, fromKey, toKey, null, 0, limit);
}
@Override
@Nonnull
- public List<Map<String, Object>> query(Collection collection, String fromKey,
- String toKey, String indexedProperty, long startValue, int limit) {
- ConcurrentSkipListMap<String, Map<String, Object>> map = getMap(collection);
- ConcurrentNavigableMap<String, Map<String, Object>> sub = map.subMap(fromKey, toKey);
- ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
- for (Map<String, Object> n : sub.values()) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ String indexedProperty,
+ long startValue,
+ int limit) {
+ ConcurrentSkipListMap<String, Document> map = getMap(collection);
+ ConcurrentNavigableMap<String, Document> sub = map.subMap(fromKey, toKey);
+ ArrayList<Document> list = new ArrayList<Document>();
+ for (Document doc : sub.values()) {
if (indexedProperty != null) {
- Long value = (Long) n.get(indexedProperty);
+ Long value = (Long) doc.get(indexedProperty);
if (value < startValue) {
continue;
}
}
- Map<String, Object> copy = Utils.newMap();
- synchronized (n) {
- Utils.deepCopyMap(n, copy);
+ Document copy = Utils.newDocument();
+ synchronized (doc) {
+ Utils.deepCopyMap(doc, copy);
}
list.add(copy);
if (list.size() >= limit) {
@@ -110,7 +117,7 @@ public class MemoryDocumentStore impleme
* @param collection the collection
* @return the map
*/
- private ConcurrentSkipListMap<String, Map<String, Object>> getMap(Collection collection) {
+ private ConcurrentSkipListMap<String, Document> getMap(Collection collection) {
switch (collection) {
case NODES:
return nodes;
@@ -122,58 +129,56 @@ public class MemoryDocumentStore impleme
}
@CheckForNull
- private Map<String, Object> internalCreateOrUpdate(Collection collection,
+ private Document internalCreateOrUpdate(Collection collection,
UpdateOp update,
boolean checkConditions) {
- ConcurrentSkipListMap<String, Map<String, Object>> map = getMap(collection);
- Map<String, Object> n;
- Map<String, Object> oldNode;
+ ConcurrentSkipListMap<String, Document> map = getMap(collection);
+ Document doc;
+ Document oldDoc;
// get the node if it's there
- oldNode = n = map.get(update.key);
+ oldDoc = doc = map.get(update.key);
- if (n == null) {
+ if (doc == null) {
if (!update.isNew) {
throw new MicroKernelException("Document does not exist: " + update.key);
}
// for a new node, add it (without synchronization)
- n = Utils.newMap();
- oldNode = map.putIfAbsent(update.key, n);
- if (oldNode != null) {
+ doc = Utils.newDocument();
+ oldDoc = map.putIfAbsent(update.key, doc);
+ if (oldDoc != null) {
// somebody else added it at the same time
- n = oldNode;
+ doc = oldDoc;
}
}
- synchronized (n) {
- if (checkConditions && !checkConditions(n, update)) {
+ synchronized (doc) {
+ if (checkConditions && !checkConditions(doc, update)) {
return null;
}
- if (oldNode != null) {
+ if (oldDoc != null) {
// clone the old node
// (document level operations are synchronized)
- Map<String, Object> oldNode2 = Utils.newMap();
- Utils.deepCopyMap(oldNode, oldNode2);
- oldNode = oldNode2;
+ Document oldDoc2 = Utils.newDocument();
+ Utils.deepCopyMap(oldDoc, oldDoc2);
+ oldDoc = oldDoc2;
}
// to return the new document:
// update the document
// (document level operations are synchronized)
- applyChanges(n, update);
+ applyChanges(doc, update);
}
- return oldNode;
+ return oldDoc;
}
@Nonnull
@Override
- public Map<String, Object> createOrUpdate(Collection collection,
- UpdateOp update)
+ public Document createOrUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
return internalCreateOrUpdate(collection, update, false);
}
@Override
- public Map<String, Object> findAndUpdate(Collection collection,
- UpdateOp update)
+ public Document findAndUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
return internalCreateOrUpdate(collection, update, true);
}
@@ -287,7 +292,7 @@ public class MemoryDocumentStore impleme
@Override
public boolean create(Collection collection, List<UpdateOp> updateOps) {
- ConcurrentSkipListMap<String, Map<String, Object>> map = getMap(collection);
+ ConcurrentSkipListMap<String, Document> map = getMap(collection);
for (UpdateOp op : updateOps) {
if (map.containsKey(op.key)) {
return false;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStore.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStore.java Wed Aug 14 12:45:22 2013
@@ -19,7 +19,6 @@ package org.apache.jackrabbit.oak.plugin
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
@@ -122,12 +121,14 @@ public class MongoDocumentStore implemen
}
@Override
- public Map<String, Object> find(Collection collection, String key) {
+ public Document find(Collection collection, String key) {
return find(collection, key, Integer.MAX_VALUE);
}
@Override
- public Map<String, Object> find(final Collection collection, final String key, int maxCacheAge) {
+ public Document find(final Collection collection,
+ final String key,
+ int maxCacheAge) {
if (collection != Collection.NODES) {
return findUncached(collection, key);
}
@@ -140,8 +141,8 @@ public class MongoDocumentStore implemen
doc = nodesCache.get(key, new Callable<CachedDocument>() {
@Override
public CachedDocument call() throws Exception {
- Map<String, Object> map = findUncached(collection, key);
- return new CachedDocument(map);
+ Document doc = findUncached(collection, key);
+ return new CachedDocument(doc);
}
});
if (maxCacheAge == 0 || maxCacheAge == Integer.MAX_VALUE) {
@@ -159,7 +160,8 @@ public class MongoDocumentStore implemen
}
}
- Map<String, Object> findUncached(Collection collection, String key) {
+ @CheckForNull
+ Document findUncached(Collection collection, String key) {
DBCollection dbCollection = getDBCollection(collection);
long start = start();
try {
@@ -175,14 +177,21 @@ public class MongoDocumentStore implemen
@Nonnull
@Override
- public List<Map<String, Object>> query(Collection collection,
- String fromKey, String toKey, int limit) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ int limit) {
return query(collection, fromKey, toKey, null, 0, limit);
}
-
+
+ @Nonnull
@Override
- public List<Map<String, Object>> query(Collection collection,
- String fromKey, String toKey, String indexedProperty, long startValue, int limit) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ String indexedProperty,
+ long startValue,
+ int limit) {
log("query", fromKey, toKey, limit);
DBCollection dbCollection = getDBCollection(collection);
QueryBuilder queryBuilder = QueryBuilder.start(UpdateOp.ID);
@@ -196,15 +205,15 @@ public class MongoDocumentStore implemen
long start = start();
try {
DBCursor cursor = dbCollection.find(query);
- List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
+ List<Document> list = new ArrayList<Document>();
for (int i = 0; i < limit && cursor.hasNext(); i++) {
DBObject o = cursor.next();
- Map<String, Object> map = convertFromDBObject(o);
+ Document doc = convertFromDBObject(o);
if (collection == Collection.NODES) {
- String key = (String) map.get(UpdateOp.ID);
- nodesCache.put(key, new CachedDocument(map));
+ String key = (String) doc.get(UpdateOp.ID);
+ nodesCache.put(key, new CachedDocument(doc));
}
- list.add(map);
+ list.add(doc);
}
return list;
} finally {
@@ -231,10 +240,10 @@ public class MongoDocumentStore implemen
}
@CheckForNull
- private Map<String, Object> findAndModify(Collection collection,
- UpdateOp updateOp,
- boolean upsert,
- boolean checkConditions) {
+ private Document findAndModify(Collection collection,
+ UpdateOp updateOp,
+ boolean upsert,
+ boolean checkConditions) {
DBCollection dbCollection = getDBCollection(collection);
QueryBuilder query = getByKeyQuery(updateOp.key);
@@ -305,18 +314,18 @@ public class MongoDocumentStore implemen
if (checkConditions && oldNode == null) {
return null;
}
- Map<String, Object> map = convertFromDBObject(oldNode);
+ Document doc = convertFromDBObject(oldNode);
// cache the new document
if (collection == Collection.NODES) {
- Map<String, Object> newMap = Utils.newMap();
- Utils.deepCopyMap(map, newMap);
+ Document newDoc = Utils.newDocument();
+ Utils.deepCopyMap(doc, newDoc);
String key = updateOp.getKey();
- MemoryDocumentStore.applyChanges(newMap, updateOp);
- nodesCache.put(key, new CachedDocument(newMap));
+ MemoryDocumentStore.applyChanges(newDoc, updateOp);
+ nodesCache.put(key, new CachedDocument(newDoc));
}
- return map;
+ return doc;
} catch (Exception e) {
throw new MicroKernelException(e);
} finally {
@@ -326,37 +335,35 @@ public class MongoDocumentStore implemen
@Nonnull
@Override
- public Map<String, Object> createOrUpdate(Collection collection,
- UpdateOp update)
+ public Document createOrUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
log("createOrUpdate", update);
- Map<String, Object> map = findAndModify(collection, update, true, false);
- log("createOrUpdate returns ", map);
- return map;
+ Document doc = findAndModify(collection, update, true, false);
+ log("createOrUpdate returns ", doc);
+ return doc;
}
@Override
- public Map<String, Object> findAndUpdate(Collection collection,
- UpdateOp update)
+ public Document findAndUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
log("findAndUpdate", update);
- Map<String, Object> map = findAndModify(collection, update, false, true);
- log("findAndUpdate returns ", map);
- return map;
+ Document doc = findAndModify(collection, update, false, true);
+ log("findAndUpdate returns ", doc);
+ return doc;
}
@Override
public boolean create(Collection collection, List<UpdateOp> updateOps) {
log("create", updateOps);
- ArrayList<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
+ List<Document> docs = new ArrayList<Document>();
DBObject[] inserts = new DBObject[updateOps.size()];
for (int i = 0; i < updateOps.size(); i++) {
inserts[i] = new BasicDBObject();
UpdateOp update = updateOps.get(i);
- Map<String, Object> target = Utils.newMap();
+ Document target = Utils.newDocument();
MemoryDocumentStore.applyChanges(target, update);
- maps.add(target);
+ docs.add(target);
for (Entry<String, Operation> entry : update.changes.entrySet()) {
String k = entry.getKey();
Operation op = entry.getValue();
@@ -392,9 +399,9 @@ public class MongoDocumentStore implemen
return false;
}
if (collection == Collection.NODES) {
- for (Map<String, Object> map : maps) {
- String id = (String) map.get(UpdateOp.ID);
- nodesCache.put(id, new CachedDocument(map));
+ for (Document doc : docs) {
+ String id = (String) doc.get(UpdateOp.ID);
+ nodesCache.put(id, new CachedDocument(doc));
}
}
return true;
@@ -406,8 +413,8 @@ public class MongoDocumentStore implemen
}
}
- private static Map<String, Object> convertFromDBObject(DBObject n) {
- Map<String, Object> copy = Utils.newMap();
+ private static Document convertFromDBObject(DBObject n) {
+ Document copy = Utils.newDocument();
if (n != null) {
for (String key : n.keySet()) {
Object o = n.get(key);
@@ -466,9 +473,9 @@ public class MongoDocumentStore implemen
static class CachedDocument implements CacheValue {
final long time = System.currentTimeMillis();
- final Map<String, Object> value;
+ final Document value;
- CachedDocument(Map<String, Object> value) {
+ CachedDocument(Document value) {
this.value = value;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoMK.java Wed Aug 14 12:45:22 2013
@@ -660,20 +660,20 @@ public class MongoMK implements MicroKer
// as the starting point
String from = Utils.getKeyLowerLimit(path);
String to = Utils.getKeyUpperLimit(path);
- List<Map<String, Object>> list = store.query(DocumentStore.Collection.NODES,
+ List<Document> list = store.query(DocumentStore.Collection.NODES,
from, to, limit);
Children c = new Children();
Set<Revision> validRevisions = new HashSet<Revision>();
if (list.size() >= limit) {
c.hasMore = true;
}
- for (Map<String, Object> e : list) {
+ for (Document doc : list) {
// filter out deleted children
- if (getLiveRevision(e, rev, validRevisions) == null) {
+ if (getLiveRevision(doc, rev, validRevisions) == null) {
continue;
}
// TODO put the whole node in the cache
- String id = e.get(UpdateOp.ID).toString();
+ String id = doc.get(UpdateOp.ID).toString();
String p = Utils.getPathFromId(id);
c.children.add(p);
}
@@ -917,10 +917,10 @@ public class MongoMK implements MicroKer
long minValue = Commit.getModified(minTimestamp);
String fromKey = Utils.getKeyLowerLimit(path);
String toKey = Utils.getKeyUpperLimit(path);
- List<Map<String, Object>> list = store.query(DocumentStore.Collection.NODES, fromKey, toKey,
+ List<Document> list = store.query(DocumentStore.Collection.NODES, fromKey, toKey,
UpdateOp.MODIFIED, minValue, Integer.MAX_VALUE);
- for (Map<String, Object> e : list) {
- String id = e.get(UpdateOp.ID).toString();
+ for (Document doc : list) {
+ String id = doc.get(UpdateOp.ID).toString();
String p = Utils.getPathFromId(id);
Node fromNode = getNode(p, fromRev);
Node toNode = getNode(p, toRev);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/LoggingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/LoggingDocumentStoreWrapper.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/LoggingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/LoggingDocumentStoreWrapper.java Wed Aug 14 12:45:22 2013
@@ -17,12 +17,12 @@
package org.apache.jackrabbit.oak.plugins.mongomk.util;
import java.util.List;
-import java.util.Map;
import javax.annotation.Nonnull;
import org.apache.jackrabbit.mk.api.MicroKernelException;
import org.apache.jackrabbit.mk.json.JsopBuilder;
+import org.apache.jackrabbit.oak.plugins.mongomk.Document;
import org.apache.jackrabbit.oak.plugins.mongomk.DocumentStore;
import org.apache.jackrabbit.oak.plugins.mongomk.UpdateOp;
import org.slf4j.Logger;
@@ -44,7 +44,7 @@ public class LoggingDocumentStoreWrapper
}
@Override
- public Map<String, Object> find(Collection collection, String key) {
+ public Document find(Collection collection, String key) {
try {
logMethod("find", collection, key);
return logResult(store.find(collection, key));
@@ -55,9 +55,7 @@ public class LoggingDocumentStoreWrapper
}
@Override
- public Map<String, Object> find(Collection collection,
- String key,
- int maxCacheAge) {
+ public Document find(Collection collection, String key, int maxCacheAge) {
try {
logMethod("find", collection, key, maxCacheAge);
return logResult(store.find(collection, key, maxCacheAge));
@@ -69,10 +67,10 @@ public class LoggingDocumentStoreWrapper
@Nonnull
@Override
- public List<Map<String, Object>> query(Collection collection,
- String fromKey,
- String toKey,
- int limit) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ int limit) {
try {
logMethod("query", collection, fromKey, toKey, limit);
return logResult(store.query(collection, fromKey, toKey, limit));
@@ -84,8 +82,12 @@ public class LoggingDocumentStoreWrapper
@Override
@Nonnull
- public List<Map<String, Object>> query(Collection collection, String fromKey,
- String toKey, String indexedProperty, long startValue, int limit) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ String indexedProperty,
+ long startValue,
+ int limit) {
try {
logMethod("query", collection, fromKey, toKey, indexedProperty, startValue, limit);
return logResult(store.query(collection, fromKey, toKey, indexedProperty, startValue, limit));
@@ -119,8 +121,7 @@ public class LoggingDocumentStoreWrapper
@Nonnull
@Override
- public Map<String, Object> createOrUpdate(Collection collection,
- UpdateOp update)
+ public Document createOrUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
try {
logMethod("createOrUpdate", collection, update);
@@ -132,8 +133,7 @@ public class LoggingDocumentStoreWrapper
}
@Override
- public Map<String, Object> findAndUpdate(Collection collection,
- UpdateOp update)
+ public Document findAndUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
try {
logMethod("findAndUpdate", collection, update);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/TimingDocumentStoreWrapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/TimingDocumentStoreWrapper.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/TimingDocumentStoreWrapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/TimingDocumentStoreWrapper.java Wed Aug 14 12:45:22 2013
@@ -26,6 +26,7 @@ import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import org.apache.jackrabbit.mk.api.MicroKernelException;
+import org.apache.jackrabbit.oak.plugins.mongomk.Document;
import org.apache.jackrabbit.oak.plugins.mongomk.DocumentStore;
import org.apache.jackrabbit.oak.plugins.mongomk.UpdateOp;
@@ -74,10 +75,10 @@ public class TimingDocumentStoreWrapper
@Override
@CheckForNull
- public Map<String, Object> find(Collection collection, String key) {
+ public Document find(Collection collection, String key) {
try {
long start = now();
- Map<String, Object> result = base.find(collection, key);
+ Document result = base.find(collection, key);
updateAndLogTimes("find", start, 0, size(result));
return result;
} catch (Exception e) {
@@ -87,10 +88,10 @@ public class TimingDocumentStoreWrapper
@Override
@CheckForNull
- public Map<String, Object> find(Collection collection, String key, int maxCacheAge) {
+ public Document find(Collection collection, String key, int maxCacheAge) {
try {
long start = now();
- Map<String, Object> result = base.find(collection, key, maxCacheAge);
+ Document result = base.find(collection, key, maxCacheAge);
updateAndLogTimes("find2", start, 0, size(result));
return result;
} catch (Exception e) {
@@ -100,11 +101,13 @@ public class TimingDocumentStoreWrapper
@Override
@Nonnull
- public List<Map<String, Object>> query(Collection collection, String fromKey,
- String toKey, int limit) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ int limit) {
try {
long start = now();
- List<Map<String, Object>> result = base.query(collection, fromKey, toKey, limit);
+ List<Document> result = base.query(collection, fromKey, toKey, limit);
updateAndLogTimes("query", start, 0, size(result));
return result;
} catch (Exception e) {
@@ -114,11 +117,15 @@ public class TimingDocumentStoreWrapper
@Override
@Nonnull
- public List<Map<String, Object>> query(Collection collection, String fromKey,
- String toKey, String indexedProperty, long startValue, int limit) {
+ public List<Document> query(Collection collection,
+ String fromKey,
+ String toKey,
+ String indexedProperty,
+ long startValue,
+ int limit) {
try {
long start = now();
- List<Map<String, Object>> result = base.query(collection, fromKey, toKey, indexedProperty, startValue, limit);
+ List<Document> result = base.query(collection, fromKey, toKey, indexedProperty, startValue, limit);
updateAndLogTimes("query2", start, 0, size(result));
return result;
} catch (Exception e) {
@@ -151,11 +158,11 @@ public class TimingDocumentStoreWrapper
@Override
@Nonnull
- public Map<String, Object> createOrUpdate(Collection collection, UpdateOp update)
+ public Document createOrUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
try {
long start = now();
- Map<String, Object> result = base.createOrUpdate(collection, update);
+ Document result = base.createOrUpdate(collection, update);
updateAndLogTimes("createOrUpdate", start, 0, size(result));
return result;
} catch (Exception e) {
@@ -165,11 +172,11 @@ public class TimingDocumentStoreWrapper
@Override
@CheckForNull
- public Map<String, Object> findAndUpdate(Collection collection, UpdateOp update)
+ public Document findAndUpdate(Collection collection, UpdateOp update)
throws MicroKernelException {
try {
long start = now();
- Map<String, Object> result = base.findAndUpdate(collection, update);
+ Document result = base.findAndUpdate(collection, update);
updateAndLogTimes("findAndUpdate", start, 0, size(result));
return result;
} catch (Exception e) {
@@ -235,14 +242,14 @@ public class TimingDocumentStoreWrapper
}
}
- private static int size(Map<String, Object> m) {
- return Utils.estimateMemoryUsage(m);
+ private static int size(Document doc) {
+ return Utils.estimateMemoryUsage(doc);
}
- private static int size(List<Map<String, Object>> list) {
+ private static int size(List<Document> list) {
int result = 0;
- for (Map<String, Object> m : list) {
- result += size(m);
+ for (Document doc : list) {
+ result += size(doc);
}
return result;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/util/Utils.java Wed Aug 14 12:45:22 2013
@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
import com.mongodb.BasicDBObject;
import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.mongomk.Document;
import org.apache.jackrabbit.oak.plugins.mongomk.Revision;
import org.bson.types.ObjectId;
@@ -59,6 +60,10 @@ public class Utils {
return new HashSet<E>();
}
+ public static Document newDocument() {
+ return new Document();
+ }
+
@SuppressWarnings("unchecked")
public static int estimateMemoryUsage(Map<String, Object> map) {
if (map == null) {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStoreTest.java?rev=1513849&r1=1513848&r2=1513849&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/mongomk/MongoDocumentStoreTest.java Wed Aug 14 12:45:22 2013
@@ -188,7 +188,7 @@ public class MongoDocumentStoreTest {
inserts.add(n.asOperation(true));
}
docStore.create(Collection.NODES, inserts);
- List<Map<String, Object>> docs = docStore.query(Collection.NODES,
+ List<Document> docs = docStore.query(Collection.NODES,
Utils.getKeyLowerLimit("/"), Utils.getKeyUpperLimit("/"),
MongoMK.MANY_CHILDREN_THRESHOLD);
assertEquals(MongoMK.MANY_CHILDREN_THRESHOLD, docs.size());