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/10/01 09:46:34 UTC

svn commit: r1527959 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk: MongoMK.java util/LoggingDocumentStoreWrapper.java

Author: mreutegg
Date: Tue Oct  1 07:46:34 2013
New Revision: 1527959

URL: http://svn.apache.org/r1527959
Log:
OAK-1057: Configurable DocumentStore logging wrapper

Modified:
    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

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=1527959&r1=1527958&r2=1527959&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 Tue Oct  1 07:46:34 2013
@@ -54,6 +54,7 @@ import org.apache.jackrabbit.oak.commons
 import org.apache.jackrabbit.oak.plugins.mongomk.Node.Children;
 import org.apache.jackrabbit.oak.plugins.mongomk.Revision.RevisionComparator;
 import org.apache.jackrabbit.oak.plugins.mongomk.blob.MongoBlobStore;
+import org.apache.jackrabbit.oak.plugins.mongomk.util.LoggingDocumentStoreWrapper;
 import org.apache.jackrabbit.oak.plugins.mongomk.util.TimingDocumentStoreWrapper;
 import org.apache.jackrabbit.oak.plugins.mongomk.util.Utils;
 import org.slf4j.Logger;
@@ -248,6 +249,9 @@ public class MongoMK implements MicroKer
         if (builder.getTiming()) {
             s = new TimingDocumentStoreWrapper(s);
         }
+        if (builder.getLogging()) {
+            s = new LoggingDocumentStoreWrapper(s);
+        }
         this.store = s;
         this.blobStore = builder.getBlobStore();
         int cid = builder.getClusterId();
@@ -1458,6 +1462,7 @@ public class MongoMK implements MicroKer
         private int clusterId  = Integer.getInteger("oak.mongoMK.clusterId", 0);
         private int asyncDelay = 1000;
         private boolean timing;
+        private boolean logging;
         private Weigher<String, CacheValue> weigher = new EmpiricalWeigher();
         private long nodeCacheSize;
         private long childrenCacheSize;
@@ -1500,6 +1505,15 @@ public class MongoMK implements MicroKer
             return timing;
         }
 
+        public Builder setLogging(boolean logging) {
+            this.logging = logging;
+            return this;
+        }
+
+        public boolean getLogging() {
+            return logging;
+        }
+
         /**
          * Set the document store to use. By default an in-memory store is used.
          * 

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=1527959&r1=1527958&r2=1527959&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 Tue Oct  1 07:46:34 2013
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.oak.plugins.mongomk.util;
 
 import java.util.List;
+import java.util.concurrent.Callable;
 
 import javax.annotation.Nonnull;
 
@@ -45,10 +46,16 @@ public class LoggingDocumentStoreWrapper
     }
 
     @Override
-    public <T extends Document> T find(Collection<T> collection, String key) {
+    public <T extends Document> T find(final Collection<T> collection,
+                                       final String key) {
         try {
             logMethod("find", collection, key);
-            return logResult(store.find(collection, key));
+            return logResult(new Callable<T>() {
+                @Override
+                public T call() throws Exception {
+                    return store.find(collection, key);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -56,10 +63,17 @@ public class LoggingDocumentStoreWrapper
     }
 
     @Override
-    public <T extends Document> T find(Collection<T> collection, String key, int maxCacheAge) {
+    public <T extends Document> T find(final Collection<T> collection,
+                                       final String key,
+                                       final int maxCacheAge) {
         try {
             logMethod("find", collection, key, maxCacheAge);
-            return logResult(store.find(collection, key, maxCacheAge));
+            return logResult(new Callable<T>() {
+                @Override
+                public T call() throws Exception {
+                    return store.find(collection, key, maxCacheAge);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -68,13 +82,18 @@ public class LoggingDocumentStoreWrapper
 
     @Nonnull
     @Override
-    public <T extends Document> List<T> query(Collection<T> collection,
-                                String fromKey,
-                                String toKey,
-                                int limit) {
+    public <T extends Document> List<T> query(final Collection<T> collection,
+                                final String fromKey,
+                                final String toKey,
+                                final int limit) {
         try {
             logMethod("query", collection, fromKey, toKey, limit);
-            return logResult(store.query(collection, fromKey, toKey, limit));
+            return logResult(new Callable<List<T>>() {
+                @Override
+                public List<T> call() throws Exception {
+                    return store.query(collection, fromKey, toKey, limit);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -83,15 +102,20 @@ public class LoggingDocumentStoreWrapper
     
     @Override
     @Nonnull
-    public <T extends Document> List<T> query(Collection<T> collection,
-                                String fromKey,
-                                String toKey,
-                                String indexedProperty,
-                                long startValue,
-                                int limit) {
+    public <T extends Document> List<T> query(final Collection<T> collection,
+                                final String fromKey,
+                                final String toKey,
+                                final String indexedProperty,
+                                final long startValue,
+                                final int limit) {
         try {
             logMethod("query", collection, fromKey, toKey, indexedProperty, startValue, limit);
-            return logResult(store.query(collection, fromKey, toKey, indexedProperty, startValue, limit));
+            return logResult(new Callable<List<T>>() {
+                @Override
+                public List<T> call() throws Exception {
+                    return store.query(collection, fromKey, toKey, indexedProperty, startValue, limit);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -110,10 +134,16 @@ public class LoggingDocumentStoreWrapper
     }
 
     @Override
-    public <T extends Document> boolean create(Collection<T> collection, List<UpdateOp> updateOps) {
+    public <T extends Document> boolean create(final Collection<T> collection,
+                                               final List<UpdateOp> updateOps) {
         try {
             logMethod("create", collection, updateOps);
-            return logResult(store.create(collection, updateOps));
+            return logResult(new Callable<Boolean>() {
+                @Override
+                public Boolean call() throws Exception {
+                    return store.create(collection, updateOps);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -122,11 +152,17 @@ public class LoggingDocumentStoreWrapper
 
     @Nonnull
     @Override
-    public <T extends Document> T createOrUpdate(Collection<T> collection, UpdateOp update)
+    public <T extends Document> T createOrUpdate(final Collection<T> collection,
+                                                 final UpdateOp update)
             throws MicroKernelException {
         try {
             logMethod("createOrUpdate", collection, update);
-            return logResult(store.createOrUpdate(collection, update));
+            return logResult(new Callable<T>() {
+                @Override
+                public T call() throws Exception {
+                    return store.createOrUpdate(collection, update);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -134,11 +170,17 @@ public class LoggingDocumentStoreWrapper
     }
 
     @Override
-    public <T extends Document> T findAndUpdate(Collection<T> collection, UpdateOp update)
+    public <T extends Document> T findAndUpdate(final Collection<T> collection,
+                                                final UpdateOp update)
             throws MicroKernelException {
         try {
             logMethod("findAndUpdate", collection, update);
-            return logResult(store.findAndUpdate(collection, update));
+            return logResult(new Callable<T>() {
+                @Override
+                public T call() throws Exception {
+                    return store.findAndUpdate(collection, update);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -179,10 +221,16 @@ public class LoggingDocumentStoreWrapper
     }
 
     @Override
-    public <T extends Document> boolean isCached(Collection<T> collection, String key) {
+    public <T extends Document> boolean isCached(final Collection<T> collection,
+                                                 final String key) {
         try {
             logMethod("isCached", collection, key);
-            return logResult(store.isCached(collection, key));
+            return logResult(new Callable<Boolean>() {
+                @Override
+                public Boolean call() throws Exception {
+                    return store.isCached(collection, key);
+                }
+            });
         } catch (Exception e) {
             logException(e);
             throw convert(e);
@@ -223,8 +271,11 @@ public class LoggingDocumentStoreWrapper
         log("// exception: " + e.toString());
     }
 
-    private static <T> T logResult(T result) {
-        log("// " + quote(result));
+    private static <T> T logResult(Callable<T> callable) throws Exception {
+        long time = System.nanoTime();
+        T result = callable.call();
+        time = System.nanoTime() - time;
+        log("// " + (time / 1000) + " us\t" + quote(result));
         return result;
     }