Author: markt Date: Tue Oct 23 12:42:59 2012 New Revision: 1401275 URL: http://svn.apache.org/viewvc?rev=1401275&view=rev Log: When removing an item from the cache, only reduce the current cache size of the item was added to the cache. Provide conversions (bytes/kilobytes) for maxCacheObjectSize
Modified: tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/Cache.java Modified: tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/Cache.java URL: http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/Cache.java?rev=1401275&r1=1401274&r2=1401275&view=diff ============================================================================== --- tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/Cache.java (original) +++ tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/Cache.java Tue Oct 23 12:42:59 2012 @@ -62,7 +62,7 @@ public class Cache { CachedResource cacheEntry = resourceCache.get(path); if (cacheEntry != null && !cacheEntry.validate()) { - removeCacheEntry(path); + removeCacheEntry(path, true); cacheEntry = null; } @@ -77,7 +77,8 @@ public class Cache { cacheEntry = newCacheEntry; cacheEntry.validate(); if (newCacheEntry.getContentLength() > getMaxObjectSize()) { - removeCacheEntry(path); + // Cache size has not been updated at this point + removeCacheEntry(path, false); return newCacheEntry; } @@ -100,7 +101,7 @@ public class Cache { if (newSize > maxSize) { // Unable to create sufficient space for this resource // Remove it from the cache - removeCacheEntry(path); + removeCacheEntry(path, true); log.warn(sm.getString("cache.addFail")); } } @@ -151,7 +152,7 @@ public class Cache { } // Remove the entry from the cache - removeCacheEntry(resource.getWebappPath()); + removeCacheEntry(resource.getWebappPath(), true); newSize = size.get(); } @@ -159,11 +160,11 @@ public class Cache { return newSize; } - private void removeCacheEntry(String path) { + private void removeCacheEntry(String path, boolean updateSize) { // With concurrent calls for the same path, the entry is only removed - // once and the cache size is only updated once. + // once and the cache size is only updated (if required) once. CachedResource cachedResource = resourceCache.remove(path); - if (cachedResource != null) { + if (cachedResource != null && updateSize) { long delta = 0 - CACHE_ENTRY_SIZE - cachedResource.getContentLength(); size.addAndGet(delta); @@ -190,11 +191,13 @@ public class Cache { public void setMaxObjectSize(long maxObjectSize) { - this.maxObjectSize = maxObjectSize; + // Internally bytes, externally kilobytes + this.maxObjectSize = maxObjectSize * 1024; } public long getMaxObjectSize() { - return maxObjectSize; + // Internally bytes, externally kilobytes + return maxObjectSize / 1024; } private static class EvictionOrder implements Comparator<CachedResource> { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org