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 ch...@apache.org on 2017/10/12 07:48:19 UTC

svn commit: r1811919 - /jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java

Author: chetanm
Date: Thu Oct 12 07:48:19 2017
New Revision: 1811919

URL: http://svn.apache.org/viewvc?rev=1811919&view=rev
Log:
OAK-6803 - Provide a way to for persistent cache to determine which all nodes can be cached

Modify fixture to allow perf impact checks for this

Modified:
    jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java

Modified: jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java?rev=1811919&r1=1811918&r2=1811919&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java (original)
+++ jackrabbit/oak/trunk/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/fixture/OakFixture.java Thu Oct 12 07:48:19 2017
@@ -19,10 +19,15 @@ package org.apache.jackrabbit.oak.fixtur
 import java.io.File;
 import java.lang.management.ManagementFactory;
 import java.net.UnknownHostException;
+import java.util.HashSet;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 import javax.sql.DataSource;
 
+import com.google.common.base.Predicate;
+import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
 import org.apache.jackrabbit.oak.Oak;
 import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
@@ -35,11 +40,14 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
 import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
 import org.apache.jackrabbit.oak.spi.blob.BlobStore;
+import org.apache.jackrabbit.oak.spi.filter.PathFilter;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.Collections.emptyList;
+
 public abstract class OakFixture {
 
     public static final String OAK_MEMORY = "Oak-Memory";
@@ -356,10 +364,10 @@ public abstract class OakFixture {
             DocumentMK.Builder mkBuilder = new DocumentMK.Builder().
                     setMongoDB(mongo.getDB()).
                     memoryCacheSize(cacheSize).
-                    //TODO Persistent cache should be removed in teardown
-                            setPersistentCache("target/persistentCache,time").
                             setClusterId(clusterId).
                             setLogging(false);
+
+            configurePersistentCache(mkBuilder);
             setupBlobStore(mkBuilder, StatisticsProvider.NOOP);
             return mkBuilder;
         }
@@ -427,6 +435,28 @@ public abstract class OakFixture {
             }
         }
 
+        private void configurePersistentCache(DocumentMK.Builder mkBuilder) {
+            //TODO Persistent cache should be removed in teardown
+            mkBuilder.setPersistentCache("target/persistentCache,time");
+
+            String persistentCacheIncludes = System.getProperty("persistentCacheIncludes");
+
+            Set<String> paths = new HashSet<>();
+            if (persistentCacheIncludes != null) {
+                for (String p : Splitter.on(',').split(persistentCacheIncludes)) {
+                    p = p != null ? Strings.emptyToNull(p.trim()) : null;
+                    if (p != null) {
+                        paths.add(p);
+                    }
+                }
+
+                PathFilter pf = new PathFilter(paths, emptyList());
+                System.out.println("Configuring persistent cache to only cache nodes under paths " + paths);
+                Predicate<String> cachePredicate = path -> path != null && pf.filter(path) == PathFilter.Result.INCLUDE;
+                mkBuilder.setNodeCachePredicate(cachePredicate);
+            }
+        }
+
     }
 
     static Oak newOak(NodeStore nodeStore) {