Return-Path: Delivered-To: apmail-sling-commits-archive@www.apache.org Received: (qmail 96313 invoked from network); 8 Jun 2010 06:57:46 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 8 Jun 2010 06:57:46 -0000 Received: (qmail 22800 invoked by uid 500); 8 Jun 2010 06:57:46 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 22750 invoked by uid 500); 8 Jun 2010 06:57:45 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 22743 invoked by uid 99); 8 Jun 2010 06:57:45 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Jun 2010 06:57:45 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Jun 2010 06:57:43 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A5D842388A43; Tue, 8 Jun 2010 06:57:21 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r952552 - /sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java Date: Tue, 08 Jun 2010 06:57:21 -0000 To: commits@sling.apache.org From: cziegeler@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100608065721.A5D842388A43@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: cziegeler Date: Tue Jun 8 06:57:21 2010 New Revision: 952552 URL: http://svn.apache.org/viewvc?rev=952552&view=rev Log: SLING-1549 : Servlet cache can grow infinitely Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=952552&r1=952551&r2=952552&view=diff ============================================================================== --- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java (original) +++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java Tue Jun 8 06:57:21 2010 @@ -186,6 +186,12 @@ public class SlingServletResolver implem /** The script resolution cache. */ private Map cache; + /** The cache size. */ + private int cacheSize; + + /** Flag to log warning if cache size exceed only once. */ + private volatile boolean logCacheSizeWarning; + /** Registration as event handler. */ private ServiceRegistration eventHandlerReg; @@ -633,7 +639,13 @@ public class SlingServletResolver implem boolean servletAcceptsRequest = !isOptingServlet || (request != null && ((OptingServlet) candidate).accepts(request)); if (servletAcceptsRequest) { if (!hasOptingServlet && !isOptingServlet && this.cache != null) { - this.cache.put(locationUtil, candidate); + if ( this.cache.size() < this.cacheSize ) { + this.cache.put(locationUtil, candidate); + } else if ( this.logCacheSizeWarning ) { + this.logCacheSizeWarning = false; + log.warn("Script cache has reached its limit of {}. You might want to increase the cache size for the servlet resolver.", + this.cacheSize); + } } log.debug("Using servlet provided by candidate resource {}", candidateResource.getPath()); return candidate; @@ -833,9 +845,12 @@ public class SlingServletResolver implem } // create cache - if a cache size is configured - final int cacheSize = OsgiUtil.toInteger(properties.get(PROP_CACHE_SIZE), DEFAULT_CACHE_SIZE); - if (cacheSize > 5) { + this.cacheSize = OsgiUtil.toInteger(properties.get(PROP_CACHE_SIZE), DEFAULT_CACHE_SIZE); + if (this.cacheSize > 5) { this.cache = new ConcurrentHashMap(cacheSize); + this.logCacheSizeWarning = true; + } else { + this.cacheSize = 0; } // and finally register as event listener @@ -1025,6 +1040,7 @@ public class SlingServletResolver implem } if (flushCache) { this.cache.clear(); + this.logCacheSizeWarning = true; } } }