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);