Author: mduerig
Date: Wed Jul 20 12:38:02 2016
New Revision: 1753495
URL: http://svn.apache.org/viewvc?rev=1753495&view=rev
Log:
OAK-4451: Implement a proper template cache
OAK-4474: Finalise SegmentCache
Consistently use a weigher for elements in the LIRS caches backing the
SegmentCache and the ReaderCache
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ReaderCache.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/StringCache.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/TemplateCache.java
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ReaderCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ReaderCache.java?rev=1753495&r1=1753494&r2=1753495&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ReaderCache.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ReaderCache.java
Wed Jul 20 12:38:02 2016
@@ -37,6 +37,15 @@ import org.apache.jackrabbit.oak.cache.E
* on an array, and a slow one uses a LIRS cache.
*/
public abstract class ReaderCache<T> {
+
+ @Nonnull
+ private final Weigher<CacheKey<T>, T> weigher = new Weigher<CacheKey<T>,
T>() {
+ @Override
+ public int weigh(CacheKey<T> key, T value) {
+ return getEntryWeight(value);
+ }
+ };
+
@Nonnull
private final String name;
@@ -55,35 +64,34 @@ public abstract class ReaderCache<T> {
/**
* Create a new string cache.
*
- * @param maxSize the maximum memory in bytes.
+ * @param maxWeight the maximum memory in bytes.
+ * @param averageWeight an estimate for the average weight of the
elements in the
+ * cache. See {@link
CacheLIRS#setAverageMemory(int)}.
*/
- protected ReaderCache(long maxSize, @Nonnull String name) {
+ protected ReaderCache(long maxWeight, int averageWeight, @Nonnull String
name) {
this.name = checkNotNull(name);
- if (maxSize >= 0) {
+ if (maxWeight >= 0) {
fastCache = new FastCache<>();
cache = CacheLIRS.<CacheKey<T>, T>newBuilder()
.module(name)
- .maximumWeight(maxSize)
- .averageWeight(250)
+ .maximumWeight(maxWeight)
+ .averageWeight(averageWeight)
+ .weigher(weigher)
.build();
} else {
fastCache = null;
// dummy cache to prevent NPE on the getStats() call
cache = CacheLIRS.<CacheKey<T>, T> newBuilder()
.module(name)
- .maximumSize(1)
+ .maximumWeight(1)
+ .averageWeight(averageWeight)
+ .weigher(weigher)
.build();
}
}
@Nonnull
public CacheStats getStats() {
- Weigher<?, ?> weigher = new Weigher<CacheKey<T>, T>() {
- @Override
- public int weigh(CacheKey<T> key, T value) {
- return getEntryWeight(value);
- }
- };
return new CacheStats(cache, name, weigher, cache.getMaxMemory());
}
@@ -121,7 +129,7 @@ public abstract class ReaderCache<T> {
if (value == null) {
value = loader.apply(offset);
assert value != null;
- cache.put(key, value, getEntryWeight(value));
+ cache.put(key, value);
}
if (isSmall(value)) {
fastCache.put(hash, new FastCacheEntry<>(hash, msb, lsb, offset,
value));
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java?rev=1753495&r1=1753494&r2=1753495&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
Wed Jul 20 12:38:02 2016
@@ -39,6 +39,13 @@ import com.google.common.cache.RemovalCa
public class SegmentCache {
private static final Logger LOG =
LoggerFactory.getLogger(SegmentCache.class);
+ private final Weigher<SegmentId, Segment> weigher = new Weigher<SegmentId,
Segment>() {
+ @Override
+ public int weigh(SegmentId id, Segment segment) {
+ return 224 + segment.size();
+ }
+ };
+
/**
* Cache of recently accessed segments
*/
@@ -49,7 +56,8 @@ public class SegmentCache {
this.cache = CacheLIRS.<SegmentId, Segment>newBuilder()
.module("SegmentCache")
.maximumWeight(cacheSizeMB * 1024 * 1024)
- .averageWeight(Segment.MAX_SEGMENT_SIZE/2)
+ .averageWeight(Segment.MAX_SEGMENT_SIZE / 2)
+ .weigher(weigher)
.evictionCallback(new EvictionCallback<SegmentId, Segment>() {
@Override
public void evicted(SegmentId id, Segment segment,
RemovalCause cause) {
@@ -67,7 +75,7 @@ public class SegmentCache {
}
public void putSegment(@Nonnull Segment segment) {
- cache.put(segment.getSegmentId(), segment, segment.size());
+ cache.put(segment.getSegmentId(), segment);
segment.getSegmentId().loaded(segment);
}
@@ -77,12 +85,6 @@ public class SegmentCache {
@Nonnull
public CacheStats getCacheStats() {
- Weigher<?, ?> weigher = new Weigher<SegmentId, Segment>() {
- @Override
- public int weigh(SegmentId key, Segment segment) {
- return segment.size();
- }
- };
return new CacheStats(cache, "Segment Cache", weigher,
cache.getMaxMemory());
}
}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/StringCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/StringCache.java?rev=1753495&r1=1753494&r2=1753495&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/StringCache.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/StringCache.java
Wed Jul 20 12:38:02 2016
@@ -33,7 +33,7 @@ public class StringCache extends ReaderC
* @param maxSize the maximum memory in bytes.
*/
StringCache(long maxSize) {
- super(maxSize, "String Cache");
+ super(maxSize, 250, "String Cache");
}
@Override
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/TemplateCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/TemplateCache.java?rev=1753495&r1=1753494&r2=1753495&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/TemplateCache.java
(original)
+++
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/TemplateCache.java
Wed Jul 20 12:38:02 2016
@@ -32,7 +32,7 @@ public class TemplateCache extends Reade
* @param maxSize the maximum memory in bytes.
*/
TemplateCache(long maxSize) {
- super(maxSize, "Template Cache");
+ super(maxSize, 250, "Template Cache");
}
@Override