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 md...@apache.org on 2017/03/21 12:11:15 UTC
svn commit: r1787947 - in /jackrabbit/oak/trunk/oak-segment-tar/src:
main/java/org/apache/jackrabbit/oak/segment/
main/java/org/apache/jackrabbit/oak/segment/file/
test/java/org/apache/jackrabbit/oak/segment/
Author: mduerig
Date: Tue Mar 21 12:11:14 2017
New Revision: 1787947
URL: http://svn.apache.org/viewvc?rev=1787947&view=rev
Log:
OAK-5954: Unify and simplify the deduplication caches
* Unified Cache interface for all deduplication caches.
* Remove cache accessors from FileStore and rely on the WriteCacheManager from the FileStoreBuilder instead.
Added:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Cache.java
Removed:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/NodeCache.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordCache.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
Added: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Cache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Cache.java?rev=1787947&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Cache.java (added)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Cache.java Tue Mar 21 12:11:14 2017
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.jackrabbit.oak.segment;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+/**
+ * Partial mapping of keys of type {@code K} to values of type {@link V}. If supported by the
+ * underlying implementation the mappings can further be associated with a cost, which is a
+ * metric for the cost occurring when the given mapping is lost. Higher values represent higher
+ * costs.
+ */
+public interface Cache<K, V> {
+
+ /**
+ * Add a mapping from {@code key} to {@code value}.
+ * @throws UnsupportedOperationException if the underlying implementation doesn't
+ * support values without an associated cost and {@link #put(Object, Object, byte)}
+ * should be used instead.
+ */
+ void put(@Nonnull K key, @Nonnull V value);
+
+ /**
+ * Add a mapping from {@code key} to {@code value} with a given {@code cost}.
+ * @throws UnsupportedOperationException if the underlying implementation doesn't
+ * support values with an associated cost and {@link #put(Object, Object)}
+ * should be used instead.
+ */
+ void put(@Nonnull K key, @Nonnull V value, byte cost);
+
+ /**
+ * @return The mapping for {@code key}, or {@code null} if none.
+ */
+ @CheckForNull
+ V get(@Nonnull K key);
+}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordCache.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordCache.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordCache.java Tue Mar 21 12:11:14 2017
@@ -24,7 +24,6 @@ import static com.google.common.base.Pre
import java.util.LinkedHashMap;
import java.util.Map;
-import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import com.google.common.base.Supplier;
@@ -32,35 +31,29 @@ import com.google.common.cache.CacheStat
import com.google.common.cache.Weigher;
/**
- * Partial mapping of keys of type {@code T} to values of type {@link RecordId}. This is
+ * Partial mapping of keys of type {@code K} to values of type {@link RecordId}. This is
* typically used for de-duplicating values that have already been persisted and thus
* already have a {@code RecordId}.
- * @param <T>
+ * @param <K>
*/
-public abstract class RecordCache<T> {
+public abstract class RecordCache<K> implements Cache<K, RecordId> {
private long hitCount;
private long missCount;
private long loadCount;
private long evictionCount;
/**
- * Add a mapping from {@code key} to {@code value}. Any existing mapping is replaced.
- */
- public abstract void put(@Nonnull T key, @Nonnull RecordId value);
-
- /**
- * @return The mapping for {@code key}, or {@code null} if none.
- */
- @CheckForNull
- public abstract RecordId get(@Nonnull T key);
-
- /**
* @return number of mappings
*/
public abstract long size();
public abstract long estimateCurrentWeight();
+ @Override
+ public void put(@Nonnull K key, @Nonnull RecordId value, byte cost) {
+ throw new UnsupportedOperationException();
+ }
+
/**
* @return access statistics for this cache
*/
@@ -147,30 +140,30 @@ public abstract class RecordCache<T> {
}
}
- private static class Default<T> extends RecordCache<T> {
+ private static class Default<K> extends RecordCache<K> {
@Nonnull
- private final Map<T, RecordId> records;
+ private final Map<K, RecordId> records;
@Nonnull
- private final Weigher<T, RecordId> weigher;
+ private final Weigher<K, RecordId> weigher;
private long weight = 0;
- static final <T> Supplier<RecordCache<T>> defaultFactory(final int size, @Nonnull final Weigher<T, RecordId> weigher) {
- return new Supplier<RecordCache<T>>() {
+ static final <K> Supplier<RecordCache<K>> defaultFactory(final int size, @Nonnull final Weigher<K, RecordId> weigher) {
+ return new Supplier<RecordCache<K>>() {
@Override
- public RecordCache<T> get() {
+ public RecordCache<K> get() {
return new Default<>(size, checkNotNull(weigher));
}
};
}
- Default(final int size, @Nonnull final Weigher<T, RecordId> weigher) {
+ Default(final int size, @Nonnull final Weigher<K, RecordId> weigher) {
this.weigher = checkNotNull(weigher);
- records = new LinkedHashMap<T, RecordId>(size * 4 / 3, 0.75f, true) {
+ records = new LinkedHashMap<K, RecordId>(size * 4 / 3, 0.75f, true) {
@Override
- protected boolean removeEldestEntry(Map.Entry<T, RecordId> eldest) {
+ protected boolean removeEldestEntry(Map.Entry<K, RecordId> eldest) {
boolean remove = super.size() > size;
if (remove) {
Default.super.evictionCount++;
@@ -183,14 +176,14 @@ public abstract class RecordCache<T> {
}
@Override
- public synchronized void put(@Nonnull T key, @Nonnull RecordId value) {
+ public synchronized void put(@Nonnull K key, @Nonnull RecordId value) {
super.loadCount++;
records.put(key, value);
weight += weigher.weigh(key, value);
}
@Override
- public synchronized RecordId get(@Nonnull T key) {
+ public synchronized RecordId get(@Nonnull K key) {
RecordId value = records.get(key);
if (value == null) {
super.missCount++;
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeStoreService.java Tue Mar 21 12:11:14 2017
@@ -504,7 +504,8 @@ public class SegmentNodeStoreService {
templateCacheStats.getName()
));
- CacheStatsMBean stringDeduplicationCacheStats = store.getStringDeduplicationCacheStats();
+ WriterCacheManager cacheManager = builder.getCacheManager();
+ CacheStatsMBean stringDeduplicationCacheStats = cacheManager.getStringCacheStats();
if (stringDeduplicationCacheStats != null) {
closeables.add(registrations.registerMBean(
CacheStatsMBean.class,
@@ -514,7 +515,7 @@ public class SegmentNodeStoreService {
));
}
- CacheStatsMBean templateDeduplicationCacheStats = store.getTemplateDeduplicationCacheStats();
+ CacheStatsMBean templateDeduplicationCacheStats = cacheManager.getTemplateCacheStats();
if (templateDeduplicationCacheStats != null) {
closeables.add(registrations.registerMBean(
CacheStatsMBean.class,
@@ -524,7 +525,7 @@ public class SegmentNodeStoreService {
));
}
- CacheStatsMBean nodeDeduplicationCacheStats = store.getNodeDeduplicationCacheStats();
+ CacheStatsMBean nodeDeduplicationCacheStats = cacheManager.getNodeCacheStats();
if (nodeDeduplicationCacheStats != null) {
closeables.add(registrations.registerMBean(
CacheStatsMBean.class,
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java Tue Mar 21 12:11:14 2017
@@ -66,7 +66,6 @@ import com.google.common.io.Closeables;
import org.apache.jackrabbit.oak.api.Blob;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
import org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState;
import org.apache.jackrabbit.oak.segment.WriteOperationHandler.WriteOperation;
import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor;
@@ -136,45 +135,11 @@ public class SegmentWriter {
this.writeOperationHandler = checkNotNull(writeOperationHandler);
}
- /**
- * Get occupancy information for the node deduplication cache indicating occupancy and
- * evictions per priority.
- * @return occupancy information for the node deduplication cache.
- */
- @CheckForNull
- public String getNodeCacheOccupancyInfo() {
- return cacheManager.getNodeCacheOccupancyInfo();
- }
-
public void flush() throws IOException {
writeOperationHandler.flush(store);
}
/**
- * @return Statistics for the string deduplication cache or {@code null} if not available.
- */
- @CheckForNull
- public CacheStatsMBean getStringCacheStats() {
- return cacheManager.getStringCacheStats();
- }
-
- /**
- * @return Statistics for the template deduplication cache or {@code null} if not available.
- */
- @CheckForNull
- public CacheStatsMBean getTemplateCacheStats() {
- return cacheManager.getTemplateCacheStats();
- }
-
- /**
- * @return Statistics for the node deduplication cache or {@code null} if not available.
- */
- @CheckForNull
- public CacheStatsMBean getNodeCacheStats() {
- return cacheManager.getNodeCacheStats();
- }
-
- /**
* Write a map record.
* @param base base map relative to which the {@code changes} are applied ot
* {@code null} for the empty map.
@@ -437,7 +402,7 @@ public class SegmentWriter {
private SegmentBufferWriter writer;
private RecordCache<String> stringCache;
private RecordCache<Template> templateCache;
- private NodeCache nodeCache;
+ private Cache<String, RecordId> nodeCache;
protected SegmentWriteOperation(@Nonnull Supplier<Boolean> cancel) {
this.cancel = cancel;
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/WriterCacheManager.java Tue Mar 21 12:11:14 2017
@@ -105,7 +105,7 @@ public abstract class WriterCacheManager
* @return cache for node records of the given {@code generation}.
*/
@Nonnull
- public abstract NodeCache getNodeCache(int generation);
+ public abstract Cache<String, RecordId> getNodeCache(int generation);
/**
* @return statistics for the string cache or {@code null} if not available.
@@ -175,15 +175,20 @@ public abstract class WriterCacheManager
}
/**
- * @return a {@code NodeCache} cache that is always empty
+ * @return a {@code Cache} cache that is always empty
*/
@Nonnull
@Override
- public NodeCache getNodeCache(int generation) {
- return new NodeCache() {
+ public Cache<String, RecordId> getNodeCache(int generation) {
+ return new Cache<String, RecordId>() {
@Override
public void put(@Nonnull String stableId, @Nonnull RecordId recordId, byte cost) { }
+ @Override
+ public void put(@Nonnull String key, @Nonnull RecordId value) {
+ throw new UnsupportedOperationException();
+ }
+
@CheckForNull
@Override
public RecordId get(@Nonnull String stableId) { return null; }
@@ -194,7 +199,7 @@ public abstract class WriterCacheManager
/**
* This implementation of {@link WriterCacheManager} returns
* {@link RecordCache} instances for the string and template cache
- * and {@link NodeCache} instance for the node cache.
+ * and {@link Cache} instance for the node cache.
*/
public static class Default extends WriterCacheManager {
/**
@@ -261,6 +266,7 @@ public abstract class WriterCacheManager
return generations.get(generation).get();
}
+ @Nonnull
@Override
public Iterator<T> iterator() {
return transform(generations.values().iterator(), new Function<Supplier<T>, T>() {
@@ -293,19 +299,28 @@ public abstract class WriterCacheManager
return templateCaches.getGeneration(generation);
}
+ private PriorityCache<String, RecordId> nodeCache() {
+ return nodeCache.get();
+ }
+
@Override
@Nonnull
- public NodeCache getNodeCache(final int generation) {
- return new NodeCache() {
+ public Cache<String, RecordId> getNodeCache(final int generation) {
+ return new Cache<String, RecordId>() {
@Override
public void put(@Nonnull String stableId, @Nonnull RecordId recordId, byte cost) {
- nodeCache.get().put(stableId, recordId, generation, cost);
+ nodeCache().put(stableId, recordId, generation, cost);
+ }
+
+ @Override
+ public void put(@Nonnull String key, @Nonnull RecordId value) {
+ throw new UnsupportedOperationException();
}
@CheckForNull
@Override
public RecordId get(@Nonnull String stableId) {
- return nodeCache.get().get(stableId, generation);
+ return nodeCache().get(stableId, generation);
}
};
}
@@ -380,28 +395,23 @@ public abstract class WriterCacheManager
new Supplier<CacheStats>() {
@Override
public CacheStats get() {
- return nodeCache.get().getStats();
+ return nodeCache().getStats();
}
},
new Supplier<Long>() {
@Override
public Long get() {
- return nodeCache.get().size();
+ return nodeCache().size();
}
},
new Supplier<Long>() {
@Override
public Long get() {
- return nodeCache.get().estimateCurrentWeight();
+ return nodeCache().estimateCurrentWeight();
}
});
}
- @Override
- public String getNodeCacheOccupancyInfo() {
- return nodeCache.get().toString();
- }
-
/**
* Remove all cache generations matching the passed {@code generations} predicate.
* @param generations
@@ -409,7 +419,7 @@ public abstract class WriterCacheManager
protected final void evictCaches(Predicate<Integer> generations) {
stringCaches.evictGenerations(generations);
templateCaches.evictGenerations(generations);
- nodeCache.get().purgeGenerations(generations);
+ nodeCache().purgeGenerations(generations);
}
}
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java Tue Mar 21 12:11:14 2017
@@ -75,7 +75,6 @@ import com.google.common.base.Supplier;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.io.Closer;
-import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean;
import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
import org.apache.jackrabbit.oak.segment.Compactor;
import org.apache.jackrabbit.oak.segment.RecordId;
@@ -295,21 +294,6 @@ public class FileStore extends AbstractF
return revisions.getHead().getSegmentId().getGcGeneration();
}
- @CheckForNull
- public CacheStatsMBean getStringDeduplicationCacheStats() {
- return segmentWriter.getStringCacheStats();
- }
-
- @CheckForNull
- public CacheStatsMBean getTemplateDeduplicationCacheStats() {
- return segmentWriter.getTemplateCacheStats();
- }
-
- @CheckForNull
- public CacheStatsMBean getNodeDeduplicationCacheStats() {
- return segmentWriter.getNodeCacheStats();
- }
-
/**
* @return a runnable for running garbage collection
*/
@@ -757,7 +741,6 @@ public class FileStore extends AbstractF
if (sufficientEstimatedGain) {
if (!gcOptions.isPaused()) {
- log(segmentWriter.getNodeCacheOccupancyInfo());
int gen = compact();
if (gen > 0) {
fileReaper.add(cleanupOldGenerations(gen));
@@ -766,7 +749,6 @@ public class FileStore extends AbstractF
gcListener.info("TarMK GC #{}: cleaning up after failed compaction", GC_COUNT);
fileReaper.add(cleanupGeneration(-gen));
}
- log(segmentWriter.getNodeCacheOccupancyInfo());
} else {
gcListener.skipped("TarMK GC #{}: compaction paused", GC_COUNT);
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStoreBuilder.java Tue Mar 21 12:11:14 2017
@@ -419,8 +419,16 @@ public class FileStoreBuilder {
return snfeListener;
}
+ /**
+ * @return creates or returns the {@code WriterCacheManager} this builder passes or
+ * passed to the store on {@link #build()}.
+ *
+ * @see #withNodeDeduplicationCacheSize(int)
+ * @see #withStringDeduplicationCacheSize(int)
+ * @see #withTemplateDeduplicationCacheSize(int)
+ */
@Nonnull
- WriterCacheManager getCacheManager() {
+ public WriterCacheManager getCacheManager() {
if (cacheManager == null) {
cacheManager = new EvictingWriteCacheManager(
stringDeduplicationCacheSize, templateDeduplicationCacheSize, nodeDeduplicationCacheSize);
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java Tue Mar 21 12:11:14 2017
@@ -162,7 +162,7 @@ public class NodeRecordTest {
}
}
- private WriterCacheManager nodesOnlyCache() {
+ private static WriterCacheManager nodesOnlyCache() {
return new WriterCacheManager() {
WriterCacheManager defaultCache = new WriterCacheManager.Default();
@@ -181,7 +181,7 @@ public class NodeRecordTest {
@Nonnull
@Override
- public NodeCache getNodeCache(int generation) {
+ public Cache<String, RecordId> getNodeCache(int generation) {
return defaultCache.getNodeCache(generation);
}
};
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java?rev=1787947&r1=1787946&r2=1787947&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCompactionIT.java Tue Mar 21 12:11:14 2017
@@ -83,6 +83,7 @@ import org.apache.jackrabbit.oak.segment
import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGC;
import org.apache.jackrabbit.oak.segment.compaction.SegmentRevisionGCMBean;
import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
import org.apache.jackrabbit.oak.segment.file.FileStoreGCMonitor;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
@@ -227,13 +228,15 @@ public class SegmentCompactionIT {
SegmentGCOptions gcOptions = defaultGCOptions()
.setEstimationDisabled(true)
.setForceTimeout(3600);
- fileStore = fileStoreBuilder(folder.getRoot())
+ FileStoreBuilder builder = fileStoreBuilder(folder.getRoot());
+ fileStore = builder
.withMemoryMapping(true)
.withGCMonitor(gcMonitor)
.withGCOptions(gcOptions)
.withStatisticsProvider(new MetricStatisticsProvider(mBeanServer, executor))
.build();
nodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
+ WriterCacheManager cacheManager = builder.getCacheManager();
Runnable cancelGC = new Runnable() {
@Override
public void run() {
@@ -263,15 +266,15 @@ public class SegmentCompactionIT {
CacheStatsMBean templateCacheStats = fileStore.getTemplateCacheStats();
registrations.add(registerMBean(templateCacheStats,
new ObjectName("IT:TYPE=" + templateCacheStats.getName())));
- CacheStatsMBean stringDeduplicationCacheStats = fileStore.getStringDeduplicationCacheStats();
+ CacheStatsMBean stringDeduplicationCacheStats = cacheManager.getStringCacheStats();
assertNotNull(stringDeduplicationCacheStats);
registrations.add(registerMBean(stringDeduplicationCacheStats,
new ObjectName("IT:TYPE=" + stringDeduplicationCacheStats.getName())));
- CacheStatsMBean templateDeduplicationCacheStats = fileStore.getTemplateDeduplicationCacheStats();
+ CacheStatsMBean templateDeduplicationCacheStats = cacheManager.getTemplateCacheStats();
assertNotNull(templateDeduplicationCacheStats);
registrations.add(registerMBean(templateDeduplicationCacheStats,
new ObjectName("IT:TYPE=" + templateDeduplicationCacheStats.getName())));
- CacheStatsMBean nodeDeduplicationCacheStats = fileStore.getNodeDeduplicationCacheStats();
+ CacheStatsMBean nodeDeduplicationCacheStats = cacheManager.getNodeCacheStats();
assertNotNull(nodeDeduplicationCacheStats);
registrations.add(registerMBean(nodeDeduplicationCacheStats,
new ObjectName("IT:TYPE=" + nodeDeduplicationCacheStats.getName())));