Author: mreutegg
Date: Thu Jan 18 13:55:11 2018
New Revision: 1821494

URL: http://svn.apache.org/viewvc?rev=1821494&view=rev
Log:
OAK-7175: Reduce cache misses on local diff-cache

Add ignored test

Modified:
    
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCacheTest.java

Modified: 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCacheTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCacheTest.java?rev=1821494&r1=1821493&r2=1821494&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCacheTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/persistentCache/NodeCacheTest.java
 Thu Jan 18 13:55:11 2018
@@ -29,24 +29,29 @@ import com.google.common.base.Predicate;
 import com.google.common.cache.RemovalCause;
 import com.google.common.collect.Lists;
 import org.apache.jackrabbit.oak.commons.concurrent.ExecutorCloser;
+import org.apache.jackrabbit.oak.json.JsopDiff;
 import org.apache.jackrabbit.oak.plugins.document.AbstractDocumentNodeState;
 import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
 import org.apache.jackrabbit.oak.plugins.document.DocumentMKBuilderProvider;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeState;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStateCache;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore;
+import org.apache.jackrabbit.oak.plugins.document.DocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.PathRev;
 import org.apache.jackrabbit.oak.plugins.document.RevisionVector;
+import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
 import org.apache.jackrabbit.oak.spi.filter.PathFilter;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
+import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.stats.Counting;
 import org.apache.jackrabbit.oak.stats.DefaultStatisticsProvider;
 import org.apache.jackrabbit.oak.stats.MeterStats;
 import org.apache.jackrabbit.oak.stats.StatisticsProvider;
 import org.apache.jackrabbit.oak.stats.StatsOptions;
 import org.junit.After;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -64,6 +69,8 @@ public class NodeCacheTest {
     public final TemporaryFolder tempFolder = new TemporaryFolder(new 
File("target"));
     @Rule
     public DocumentMKBuilderProvider builderProvider = new 
DocumentMKBuilderProvider();
+
+    private DocumentStore store;
     private DocumentNodeStore ns;
     private NodeCache<PathRev, DocumentNodeState> nodeCache;
     private NodeCache<PathRev, DocumentNodeState.Children> nodeChildren;
@@ -174,12 +181,46 @@ public class NodeCacheTest {
         assertEquals(requests, stats.getCount());
     }
 
+    @Ignore
+    @Test
+    public void localDiffCache() throws Exception {
+        initializeNodeStore(false);
+        // initialize a second cluster node using the same document store
+        DocumentNodeStore ns2 = builderProvider.newBuilder().setClusterId(2)
+                .setDocumentStore(store).setAsyncDelay(0).build();
+        // sync the two cluster nodes
+        ns2.runBackgroundOperations();
+        ns.runBackgroundOperations();
+
+        MeterStats stats = 
statsProvider.getMeter("PersistentCache.NodeCache.local_diff.REQUESTS", 
StatsOptions.DEFAULT);
+
+        NodeState r1 = ns.getRoot();
+
+        // external change from first cluster node POV
+        NodeBuilder builder = ns2.getRoot().builder();
+        builder.child("x");
+        ns2.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
+
+        // sync
+        ns2.runBackgroundOperations();
+        ns.runBackgroundOperations();
+
+        long requests = stats.getCount();
+        // diff for external change
+        NodeState r2 = ns.getRoot();
+        JsopDiff.diffToJsop(r1, r2);
+        // must not use local_diff persistent cache
+        assertEquals(requests, stats.getCount());
+    }
+
     private void initializeNodeStore(boolean asyncCache) {
         initializeNodeStore(asyncCache, b -> {});
     }
 
     private void initializeNodeStore(boolean asyncCache, 
Consumer<DocumentMK.Builder> processor) {
+        store = new MemoryDocumentStore();
         DocumentMK.Builder builder = builderProvider.newBuilder()
+                .setDocumentStore(store)
                 .setAsyncDelay(0)
                 .setStatisticsProvider(statsProvider);
 


Reply via email to