You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by js...@apache.org on 2016/04/25 14:19:53 UTC
svn commit: r1740828 - in /jackrabbit/branches/2.10: ./
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
Author: jsedding
Date: Mon Apr 25 12:19:52 2016
New Revision: 1740828
URL: http://svn.apache.org/viewvc?rev=1740828&view=rev
Log:
JCR-3972 - Make size of ID-cache in CachingHierarchyManager configurable
- merged to branches/2.10
Modified:
jackrabbit/branches/2.10/ (props changed)
jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
Propchange: jackrabbit/branches/2.10/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Apr 25 12:19:52 2016
@@ -1,3 +1,3 @@
/jackrabbit/branches/JCR-2272:1173165-1176545
/jackrabbit/sandbox/JCR-2415-lucene-3.0:1060860-1064038
-/jackrabbit/trunk:1729382,1732436,1740814
+/jackrabbit/trunk:1729382,1732436,1740814-1740815
Modified: jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java?rev=1740828&r1=1740827&r2=1740828&view=diff
==============================================================================
--- jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java (original)
+++ jackrabbit/branches/2.10/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/CachingHierarchyManager.java Mon Apr 25 12:19:52 2016
@@ -56,6 +56,12 @@ public class CachingHierarchyManager ext
*/
public static final int DEFAULT_UPPER_LIMIT = 10000;
+ private static final int MAX_UPPER_LIMIT =
+ Integer.getInteger("org.apache.jackrabbit.core.CachingHierarchyManager.cacheSize", DEFAULT_UPPER_LIMIT);
+
+ private static final int CACHE_STATISTICS_LOG_INTERVAL_MILLIS =
+ Integer.getInteger("org.apache.jackrabbit.core.CachingHierarchyManager.logInterval", 60000);
+
/**
* Logger instance
*/
@@ -82,6 +88,11 @@ public class CachingHierarchyManager ext
private final int upperLimit;
/**
+ * Object collecting and logging statistics about the idCache
+ */
+ private final CacheStatistics idCacheStatistics;
+
+ /**
* Head of LRU
*/
private LRUEntry head;
@@ -115,7 +126,13 @@ public class CachingHierarchyManager ext
public CachingHierarchyManager(NodeId rootNodeId,
ItemStateManager provider) {
super(rootNodeId, provider);
- upperLimit = DEFAULT_UPPER_LIMIT;
+ upperLimit = MAX_UPPER_LIMIT;
+ idCacheStatistics = new CacheStatistics();
+ if (log.isTraceEnabled()) {
+ log.trace("CachingHierarchyManager initialized. Max cache size = {}", upperLimit, new Exception());
+ } else {
+ log.debug("CachingHierarchyManager initialized. Max cache size = {}", upperLimit);
+ }
}
/**
@@ -552,6 +569,9 @@ public class CachingHierarchyManager ext
return;
}
if (idCache.size() >= upperLimit) {
+
+ idCacheStatistics.log();
+
/**
* Remove least recently used item. Scans the LRU list from
* head to tail and removes the first item that has no children.
@@ -1021,4 +1041,32 @@ public class CachingHierarchyManager ext
return id.toString();
}
}
+
+ private final class CacheStatistics {
+
+ private final String id;
+
+ private final ReferenceMap cache;
+
+ private long timeStamp = 0;
+
+ public CacheStatistics() {
+ this.id = cacheMonitor.toString();
+ this.cache = idCache;
+ }
+
+ public void log() {
+ if (log.isDebugEnabled()) {
+ long now = System.currentTimeMillis();
+ final String msg = "Cache id = {};size = {};max = {}";
+ if (log.isTraceEnabled()) {
+ log.trace(msg, new Object[]{id, this.cache.size(), upperLimit}, new Exception());
+ } else if (now > timeStamp + CACHE_STATISTICS_LOG_INTERVAL_MILLIS) {
+ timeStamp = now;
+ log.debug(msg, new Object[]{id, this.cache.size(), upperLimit}, new Exception());
+ }
+ }
+ }
+ }
+
}