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 20:42:18 UTC
svn commit: r1788026 - in /jackrabbit/oak/trunk/oak-segment-tar/src:
main/java/org/apache/jackrabbit/oak/segment/
test/java/org/apache/jackrabbit/oak/segment/
Author: mduerig
Date: Tue Mar 21 20:42:17 2017
New Revision: 1788026
URL: http://svn.apache.org/viewvc?rev=1788026&view=rev
Log:
OAK-5954: Unify and simplify the deduplication caches
Separate statistics for regular writes and compaction writes
Modified:
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/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java
jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/WriteCacheManagerTest.java
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=1788026&r1=1788025&r2=1788026&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 20:42:17 2017
@@ -45,6 +45,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.segment.MapEntry.newModifiedMapEntry;
import static org.apache.jackrabbit.oak.segment.MapRecord.BUCKETS_PER_LEVEL;
import static org.apache.jackrabbit.oak.segment.RecordWriters.newNodeStateWriter;
+import static org.apache.jackrabbit.oak.segment.WriterCacheManager.Operation.COMPACT;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -319,7 +320,7 @@ public class SegmentWriter {
@Nonnull
@Override
public RecordId execute(@Nonnull SegmentBufferWriter writer) throws IOException {
- return with(writer).writeNode(state);
+ return with(writer, true).writeNode(state);
}
});
return new SegmentNodeState(reader, this, nodeId);
@@ -367,16 +368,21 @@ public class SegmentWriter {
public abstract RecordId execute(@Nonnull SegmentBufferWriter writer) throws IOException;
@Nonnull
- SegmentWriteOperation with(@Nonnull SegmentBufferWriter writer) {
+ SegmentWriteOperation with(@Nonnull SegmentBufferWriter writer, boolean compacting) {
checkState(this.writer == null);
this.writer = writer;
int generation = writer.getGeneration();
- this.stringCache = cacheManager.getStringCache(generation);
- this.templateCache = cacheManager.getTemplateCache(generation);
- this.nodeCache = cacheManager.getNodeCache(generation);
+ this.stringCache = cacheManager.getStringCache(generation, COMPACT);
+ this.templateCache = cacheManager.getTemplateCache(generation, COMPACT);
+ this.nodeCache = cacheManager.getNodeCache(generation, COMPACT);
return this;
}
+ @Nonnull
+ SegmentWriteOperation with(@Nonnull SegmentBufferWriter writer) {
+ return with(writer, false);
+ }
+
private RecordId writeMap(@Nullable MapRecord base,
@Nonnull Map<String, RecordId> changes)
throws IOException {
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=1788026&r1=1788025&r2=1788026&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 20:42:17 2017
@@ -51,6 +51,16 @@ import org.apache.jackrabbit.oak.stats.S
* generations being reused.
*/
public abstract class WriterCacheManager {
+ /**
+ * The type of operation a cache acquired through this manager is used for.
+ * This type is used to determine against which monitoring endpoint to report
+ * access statistics.
+ *
+ * @see #getStringCache(int, Operation)
+ * @see #getTemplateCache(int, Operation)
+ * @see #getNodeCache(int, Operation)
+ */
+ public enum Operation {WRITE, COMPACT}
/**
* Default size of the string cache, used as default for OSGi config.
@@ -59,7 +69,7 @@ public abstract class WriterCacheManager
/**
* Default size of the string cache.
- * @see #getStringCache(int)
+ * @see #getStringCache(int, Operation)
*/
public static final int DEFAULT_STRING_CACHE_SIZE = getInteger(
"oak.tar.stringsCacheSize", DEFAULT_STRING_CACHE_SIZE_OSGi);
@@ -71,7 +81,7 @@ public abstract class WriterCacheManager
/**
* Default size of the template cache.
- * @see #getTemplateCache(int)
+ * @see #getTemplateCache(int, Operation)
*/
public static final int DEFAULT_TEMPLATE_CACHE_SIZE = getInteger(
"oak.tar.templatesCacheSize", DEFAULT_TEMPLATE_CACHE_SIZE_OSGi);
@@ -84,31 +94,29 @@ public abstract class WriterCacheManager
/**
* Default size of the node deduplication cache.
- * @see #getNodeCache(int)
+ * @see #getNodeCache(int, Operation)
*/
public static final int DEFAULT_NODE_CACHE_SIZE = getInteger(
"oak.tar.nodeCacheSize", DEFAULT_NODE_CACHE_SIZE_OSGi);
/**
- * @param generation
- * @return cache for string records of the given {@code generation}.
+ * @return cache for string records of the given {@code generation} and {@code operation}.
*/
@Nonnull
- public abstract Cache<String, RecordId> getStringCache(int generation);
+ public abstract Cache<String, RecordId> getStringCache(int generation, Operation operation);
/**
* @param generation
- * @return cache for template records of the given {@code generation}.
+ * @return cache for template records of the given {@code generation} and {@code operation}.
*/
@Nonnull
- public abstract Cache<Template, RecordId> getTemplateCache(int generation);
+ public abstract Cache<Template, RecordId> getTemplateCache(int generation, Operation operation);
/**
- * @param generation
- * @return cache for node records of the given {@code generation}.
+ * @return cache for node records of the given {@code generation} and {@code operation}.
*/
@Nonnull
- public abstract Cache<String, RecordId> getNodeCache(int generation);
+ public abstract Cache<String, RecordId> getNodeCache(int generation, Operation operation);
/**
* @return statistics for the string cache or {@code null} if not available.
@@ -164,7 +172,7 @@ public abstract class WriterCacheManager
*/
@Nonnull
@Override
- public RecordCache<String> getStringCache(int generation) {
+ public RecordCache<String> getStringCache(int generation, Operation operation) {
return stringCache;
}
@@ -173,7 +181,7 @@ public abstract class WriterCacheManager
*/
@Nonnull
@Override
- public RecordCache<Template> getTemplateCache(int generation) {
+ public RecordCache<Template> getTemplateCache(int generation, Operation operation) {
return templateCache;
}
@@ -182,7 +190,7 @@ public abstract class WriterCacheManager
*/
@Nonnull
@Override
- public Cache<String, RecordId> getNodeCache(int generation) {
+ public Cache<String, RecordId> getNodeCache(int generation, Operation operation) {
return new Cache<String, RecordId>() {
@Override
public void put(@Nonnull String stableId, @Nonnull RecordId recordId, byte cost) { }
@@ -304,15 +312,15 @@ public abstract class WriterCacheManager
@Nonnull
@Override
- public Cache<String, RecordId> getStringCache(int generation) {
- return new AccessTrackingCache<>("oak.segment.string-deduplication-cache",
+ public Cache<String, RecordId> getStringCache(int generation, Operation operation) {
+ return new AccessTrackingCache<>("oak.segment.string-deduplication-cache-" + operation,
stringCaches.getGeneration(generation));
}
@Nonnull
@Override
- public Cache<Template, RecordId> getTemplateCache(int generation) {
- return new AccessTrackingCache<>("oak.segment.template-deduplication-cache",
+ public Cache<Template, RecordId> getTemplateCache(int generation, Operation operation) {
+ return new AccessTrackingCache<>("oak.segment.template-deduplication-cache-" + operation,
templateCaches.getGeneration(generation));
}
@@ -322,8 +330,8 @@ public abstract class WriterCacheManager
@Override
@Nonnull
- public Cache<String, RecordId> getNodeCache(final int generation) {
- return new AccessTrackingCache<>("oak.segment.node-deduplication-cache",
+ public Cache<String, RecordId> getNodeCache(final int generation, Operation operation) {
+ return new AccessTrackingCache<>("oak.segment.node-deduplication-cache-" + operation,
new Cache<String, RecordId>() {
@Override
public void put(@Nonnull String stableId, @Nonnull RecordId recordId, byte cost) {
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=1788026&r1=1788025&r2=1788026&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 20:42:17 2017
@@ -169,20 +169,20 @@ public class NodeRecordTest {
@Nonnull
@Override
- public Cache<String, RecordId> getStringCache(int generation) {
- return Empty.INSTANCE.getStringCache(generation);
+ public Cache<String, RecordId> getStringCache(int generation, Operation operation) {
+ return Empty.INSTANCE.getStringCache(generation, operation);
}
@Nonnull
@Override
- public Cache<Template, RecordId> getTemplateCache(int generation) {
- return Empty.INSTANCE.getTemplateCache(generation);
+ public Cache<Template, RecordId> getTemplateCache(int generation, Operation operation) {
+ return Empty.INSTANCE.getTemplateCache(generation, operation);
}
@Nonnull
@Override
- public Cache<String, RecordId> getNodeCache(int generation) {
- return defaultCache.getNodeCache(generation);
+ public Cache<String, RecordId> getNodeCache(int generation, Operation operation) {
+ return defaultCache.getNodeCache(generation, operation);
}
};
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/WriteCacheManagerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/WriteCacheManagerTest.java?rev=1788026&r1=1788025&r2=1788026&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/WriteCacheManagerTest.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/WriteCacheManagerTest.java Tue Mar 21 20:42:17 2017
@@ -19,6 +19,7 @@
package org.apache.jackrabbit.oak.segment;
+import static org.apache.jackrabbit.oak.segment.WriterCacheManager.Operation.WRITE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@@ -31,15 +32,23 @@ public class WriteCacheManagerTest {
@Test
public void emptyGenerations() {
WriterCacheManager cache = Empty.INSTANCE;
- assertEquals(cache.getTemplateCache(0), cache.getTemplateCache(1));
- assertEquals(cache.getStringCache(0), cache.getStringCache(1));
+ assertEquals(
+ cache.getTemplateCache(0, WRITE),
+ cache.getTemplateCache(1, WRITE));
+ assertEquals(
+ cache.getStringCache(0, WRITE),
+ cache.getStringCache(1, WRITE));
}
@Test
public void nonEmptyGenerations() {
WriterCacheManager cache = new Default();
- assertNotEquals(cache.getTemplateCache(0), cache.getTemplateCache(1));
- assertNotEquals(cache.getStringCache(0), cache.getStringCache(1));
+ assertNotEquals(
+ cache.getTemplateCache(0, WRITE),
+ cache.getTemplateCache(1, WRITE));
+ assertNotEquals(
+ cache.getStringCache(0, WRITE),
+ cache.getStringCache(1, WRITE));
}
}