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 09:47:49 UTC

svn commit: r1466782 - in /jackrabbit/oak/trunk/oak-mongomk/src: main/java/org/apache/jackrabbit/mongomk/impl/ main/java/org/apache/jackrabbit/mongomk/osgi/ main/java/org/apache/jackrabbit/mongomk/prototype/ main/java/org/apache/jackrabbit/mongomk/util...

Author: thomasm
Date: Thu Apr 11 07:47:49 2013
New Revision: 1466782

URL: http://svn.apache.org/r1466782
Log:
OAK-731 The cluster id should be automatically generated (the document cache should only cache nodes, not clusterNode info)

Added:
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoConnection.java
      - copied, changed from r1466488, jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java
Removed:
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java
Modified:
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/osgi/MongoMicroKernelService.java
    jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/DocumentStore.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/test/java/org/apache/jackrabbit/mongomk/AbstractMongoConnectionTest.java
    jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKConcurrentAddTest.java
    jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/multitenancy/MultiTenancyTest.java
    jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/ClusterTest.java
    jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoUtils.java

Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/osgi/MongoMicroKernelService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/osgi/MongoMicroKernelService.java?rev=1466782&r1=1466781&r2=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/osgi/MongoMicroKernelService.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/osgi/MongoMicroKernelService.java Thu Apr 11 07:47:49 2013
@@ -27,8 +27,8 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.mongomk.impl.MongoConnection;
 import org.apache.jackrabbit.mongomk.prototype.MongoMK;
+import org.apache.jackrabbit.mongomk.util.MongoConnection;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
@@ -47,7 +47,7 @@ import com.mongodb.DB;
 public class MongoMicroKernelService {
 
     private static final String DEFAULT_HOST = "localhost";
-    private static final int DEFAULT_PORT= 27017;
+    private static final int DEFAULT_PORT = 27017;
     private static final String DEFAULT_DB = "oak";
 
     @Property(value = DEFAULT_HOST)
@@ -88,7 +88,7 @@ public class MongoMicroKernelService {
 
     @Deactivate
     private void deactivate() {
-        if (reg != null){
+        if (reg != null) {
             reg.unregister();
         }
 

Modified: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/DocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/DocumentStore.java?rev=1466782&r1=1466781&r2=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/DocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/prototype/DocumentStore.java Thu Apr 11 07:47:49 2013
@@ -146,4 +146,13 @@ public interface DocumentStore {
      */
     void dispose();
 
+    /**
+     * Check whether the given document is in the cache.
+     * 
+     * @param collection the collection
+     * @param key the key
+     * @return true if yes
+     */
+    boolean isCached(Collection collection, String key);
+
 }

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=1466782&r1=1466781&r2=1466782&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 Thu Apr 11 07:47:49 2013
@@ -238,4 +238,9 @@ public class MemoryDocumentStore impleme
         // ignore
     }
 
+    @Override
+    public boolean isCached(Collection collection, String key) {
+        return false;
+    }
+
 }
\ No newline at end of file

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=1466782&r1=1466781&r2=1466782&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 Thu Apr 11 07:47:49 2013
@@ -60,7 +60,7 @@ public class MongoDocumentStore implemen
      */
     private long timeSum;
     
-    private final Cache<String, CachedDocument> cache;
+    private final Cache<String, CachedDocument> nodesCache;
 
     public MongoDocumentStore(DB db) {
         nodes = db.getCollection(
@@ -77,7 +77,7 @@ public class MongoDocumentStore implemen
         // nodesCollection.ensureIndex(index, options);
 
         // TODO expire entries if the parent was changed
-        cache = CacheBuilder.newBuilder()
+        nodesCache = CacheBuilder.newBuilder()
                 .maximumSize(MongoMK.CACHE_DOCUMENTS)
                 .build();
         
@@ -102,7 +102,7 @@ public class MongoDocumentStore implemen
     
     @Override
     public void invalidateCache() {
-        cache.invalidateAll();
+        nodesCache.invalidateAll();
     }
 
     public Map<String, Object> find(Collection collection, String key) {
@@ -111,10 +111,13 @@ public class MongoDocumentStore implemen
     
     @Override
     public Map<String, Object> find(final Collection collection, final String key, int maxCacheAge) {
+        if (collection != Collection.NODES) {
+            return findUncached(collection, key);
+        }
         try {
             CachedDocument doc;
             while (true) {
-                doc = cache.get(key, new Callable<CachedDocument>() {
+                doc = nodesCache.get(key, new Callable<CachedDocument>() {
                     @Override
                     public CachedDocument call() throws Exception {
                         Map<String, Object> map = findUncached(collection, key);
@@ -128,7 +131,7 @@ public class MongoDocumentStore implemen
                     break;
                 }
                 // too old: invalidate, try again
-                cache.invalidate(key);
+                nodesCache.invalidate(key);
             }
             return doc.value;
         } catch (ExecutionException e) {
@@ -167,8 +170,10 @@ public class MongoDocumentStore implemen
             for (int i = 0; i < limit && cursor.hasNext(); i++) {
                 DBObject o = cursor.next();
                 Map<String, Object> map = convertFromDBObject(o);
-                String key = (String) map.get(UpdateOp.ID);
-                cache.put(key, new CachedDocument(map));
+                if (collection == Collection.NODES) {
+                    String key = (String) map.get(UpdateOp.ID);
+                    nodesCache.put(key, new CachedDocument(map));
+                }
                 list.add(map);
             }
             return list;
@@ -183,7 +188,9 @@ public class MongoDocumentStore implemen
         DBCollection dbCollection = getDBCollection(collection);
         long start = start();
         try {
-            cache.invalidate(key);
+            if (collection == Collection.NODES) {
+                nodesCache.invalidate(key);
+            }
             WriteResult writeResult = dbCollection.remove(getByKeyQuery(key), WriteConcern.SAFE);
             if (writeResult.getError() != null) {
                 throw new MicroKernelException("Remove failed: " + writeResult.getError());
@@ -261,11 +268,13 @@ public class MongoDocumentStore implemen
             Map<String, Object> map = convertFromDBObject(oldNode);
             
             // cache the new document
-            Map<String, Object> newMap = Utils.newMap();
-            Utils.deepCopyMap(map, newMap);
-            String key = updateOp.getKey();
-            MemoryDocumentStore.applyChanges(newMap, updateOp);
-            cache.put(key, new CachedDocument(newMap));
+            if (collection == Collection.NODES) {
+                Map<String, Object> newMap = Utils.newMap();
+                Utils.deepCopyMap(map, newMap);
+                String key = updateOp.getKey();
+                MemoryDocumentStore.applyChanges(newMap, updateOp);
+                nodesCache.put(key, new CachedDocument(newMap));
+            }
             
             log("createOrUpdate returns ", map);
             return map;
@@ -322,9 +331,11 @@ public class MongoDocumentStore implemen
                 if (writeResult.getError() != null) {
                     return false;
                 }
-                for (Map<String, Object> map : maps) {
-                    String id = (String) map.get(UpdateOp.ID);
-                    cache.put(id, new CachedDocument(map));
+                if (collection == Collection.NODES) {
+                    for (Map<String, Object> map : maps) {
+                        String id = (String) map.get(UpdateOp.ID);
+                        nodesCache.put(id, new CachedDocument(map));
+                    }
                 }
                 return true;
             } catch (MongoException e) {
@@ -396,4 +407,12 @@ public class MongoDocumentStore implemen
         }
     }
 
+    @Override
+    public boolean isCached(Collection collection, String key) {
+        if (collection != Collection.NODES) {
+            return false;
+        }
+        return nodesCache.getIfPresent(key) != null;
+    }
+
 }
\ No newline at end of file

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=1466782&r1=1466781&r2=1466782&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 Thu Apr 11 07:47:49 2013
@@ -45,6 +45,7 @@ import org.apache.jackrabbit.mk.json.Jso
 import org.apache.jackrabbit.mk.json.JsopTokenizer;
 import org.apache.jackrabbit.mk.json.JsopWriter;
 import org.apache.jackrabbit.mongomk.impl.blob.MongoBlobStore;
+import org.apache.jackrabbit.mongomk.prototype.DocumentStore.Collection;
 import org.apache.jackrabbit.mongomk.prototype.Node.Children;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.slf4j.Logger;
@@ -1371,4 +1372,12 @@ public class MongoMK implements MicroKer
         return clusterNodeInfo;
     }
 
+    public int getPendingWriteCount() {
+        return unsavedLastRevisions.size();
+    }
+
+    public boolean isCached(String path) {
+        return store.isCached(Collection.NODES, Utils.getIdFromPath(path));
+    }
+
 }

Copied: jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoConnection.java (from r1466488, jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoConnection.java?p2=jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoConnection.java&p1=jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java&r1=1466488&r2=1466782&rev=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/impl/MongoConnection.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/main/java/org/apache/jackrabbit/mongomk/util/MongoConnection.java Thu Apr 11 07:47:49 2013
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.jackrabbit.mongomk.impl;
+package org.apache.jackrabbit.mongomk.util;
 
 import com.mongodb.DB;
 import com.mongodb.Mongo;

Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/AbstractMongoConnectionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/AbstractMongoConnectionTest.java?rev=1466782&r1=1466781&r2=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/AbstractMongoConnectionTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/AbstractMongoConnectionTest.java Thu Apr 11 07:47:49 2013
@@ -16,7 +16,7 @@
  */
 package org.apache.jackrabbit.mongomk;
 
-import org.apache.jackrabbit.mongomk.impl.MongoConnection;
+import org.apache.jackrabbit.mongomk.util.MongoConnection;
 import org.junit.After;
 import org.junit.Assume;
 import org.junit.Before;

Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKConcurrentAddTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKConcurrentAddTest.java?rev=1466782&r1=1466781&r2=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKConcurrentAddTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/impl/MongoMKConcurrentAddTest.java Thu Apr 11 07:47:49 2013
@@ -28,6 +28,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mongomk.AbstractMongoConnectionTest;
 import org.apache.jackrabbit.mongomk.prototype.MongoMK;
+import org.apache.jackrabbit.mongomk.util.MongoConnection;
 import org.junit.After;
 import org.junit.Test;
 

Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/multitenancy/MultiTenancyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/multitenancy/MultiTenancyTest.java?rev=1466782&r1=1466781&r2=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/multitenancy/MultiTenancyTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/multitenancy/MultiTenancyTest.java Thu Apr 11 07:47:49 2013
@@ -22,8 +22,8 @@ import static org.junit.Assert.assertTru
 
 import org.apache.jackrabbit.mk.api.MicroKernel;
 import org.apache.jackrabbit.mongomk.AbstractMongoConnectionTest;
-import org.apache.jackrabbit.mongomk.impl.MongoConnection;
 import org.apache.jackrabbit.mongomk.prototype.MongoMK;
+import org.apache.jackrabbit.mongomk.util.MongoConnection;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;

Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/ClusterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/ClusterTest.java?rev=1466782&r1=1466781&r2=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/ClusterTest.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/ClusterTest.java Thu Apr 11 07:47:49 2013
@@ -21,7 +21,8 @@ import static org.junit.Assert.fail;
 
 import org.apache.jackrabbit.mk.api.MicroKernelException;
 import org.apache.jackrabbit.mk.blobs.MemoryBlobStore;
-import org.junit.Ignore;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
 import com.mongodb.DB;
@@ -119,7 +120,6 @@ public class ClusterTest {
     }
     
     @Test
-    @Ignore
     public void revisionVisibility() throws InterruptedException {
         MongoMK mk1 = createMK(1);
         MongoMK mk2 = createMK(2);
@@ -133,11 +133,22 @@ public class ClusterTest {
         assertEquals("{\"test\":{},\":childNodeCount\":1}", m1h);
         
         m2h = mk2.getNodes("/", mk2.getHeadRevision(), 0, 0, 2, null);
+        
         // not available yet...
         assertEquals("{\":childNodeCount\":0}", m2h);
+        m2h = mk2.getNodes("/test", mk2.getHeadRevision(), 0, 0, 2, null);
         
-        // the delay is 10 ms
-        Thread.sleep(100);
+        // the delay is 10 ms - wait at most 1000 millis
+        for (int i = 0; i < 100; i++) {
+            Thread.sleep(10);
+            if (mk1.getPendingWriteCount() > 0) {
+                continue;
+            }
+            if (mk2.isCached("/")) {
+                continue;
+            }
+            break;
+        }
         
         // so now it should be available
         m2h = mk2.getNodes("/", mk2.getHeadRevision(), 0, 0, 5, null);
@@ -168,12 +179,19 @@ public class ClusterTest {
         mk2.dispose();
     }
 
+    @Before
+    @After
+    public void clear() {
+        if (MONGO_DB) {
+            DB db = MongoUtils.getConnection().getDB();
+            MongoUtils.dropCollections(db);
+        }                    
+    }
 
     private MongoMK createMK(int clusterId) {
         MongoMK.Builder builder = new MongoMK.Builder();
         if (MONGO_DB) {
             DB db = MongoUtils.getConnection().getDB();
-            MongoUtils.dropCollections(db);
             builder.setMongoDB(db);
         } else {
             if (ds == null) {

Modified: jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoUtils.java?rev=1466782&r1=1466781&r2=1466782&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoUtils.java (original)
+++ jackrabbit/oak/trunk/oak-mongomk/src/test/java/org/apache/jackrabbit/mongomk/prototype/MongoUtils.java Thu Apr 11 07:47:49 2013
@@ -16,7 +16,7 @@
  */
 package org.apache.jackrabbit.mongomk.prototype;
 
-import org.apache.jackrabbit.mongomk.impl.MongoConnection;
+import org.apache.jackrabbit.mongomk.util.MongoConnection;
 
 import com.mongodb.BasicDBObject;
 import com.mongodb.DB;