[ http://jira.magnolia-cms.com/browse/MAGNOLIA-3167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=28249#action_28249 ]
Hudson CI server commented on MAGNOLIA-3167: -------------------------------------------- Integrated in !http://hudson.magnolia-cms.com/nocacheImages/16x16/blue.gif! [magnolia_main-trunk #1611|http://hudson.magnolia-cms.com/job/magnolia_main-trunk/1611/] MAGNOLIA-3167 Improved comments and better variable names. > cache: single blocking request can block all other requests to cached content > ------------------------------------------------------------------------------ > > Key: MAGNOLIA-3167 > URL: http://jira.magnolia-cms.com/browse/MAGNOLIA-3167 > Project: Magnolia > Issue Type: Bug > Components: cache > Affects Versions: 3.6.8, 4.1.4, 4.2.3, 4.3.1 > Reporter: Philipp Bärfuss > Assignee: Jan Haderka > Fix For: 4.3.x > > Attachments: cacheBlock.png, cacheBlockOnflush.png > > > the cache mechanism can block all requests: > * cache.get() will block if an other request is caching the same key (this is > a feature of the BlockingCache) > ** mutex per key kept until cache.put() is called (either with an entry or > null value) > * this code is again in a synchronized block which synchronizes on the cache > object itself > ** this blocks all other request trying to enter the synchronization block > The critical scenario which can prevent magnolia from responding any request > (all threads blocked) is the following > 1) first request to a resource which is slow or never returns (request to a > service, poor database connection, ..) > 2) second request to the same resource: --> thread is blocked at > EhCacheWrapper.get(key):56, but also keeps the lock on the cache > 3) all other caching requests are blocked (no matter which url) due to the > synchronize block at Default.shouldCache(Cache, AggregationState, > FlushPolicy):89 > Solution: > * don't synchronize on the cache (why are we doing this???) > * allow configuration of > [BlockingCache.timeoutMillis|http://ehcache.org/apidocs/net/sf/ehcache/constructs/blocking/BlockingCache.html#timeoutMillis] > ** throw an exception if a request waits for to long > * uncomment finally block at doFilter(HttpServletRequest, > HttpServletResponse, FilterChain), this is a safety net and should log a > FATAL ERROR message > ** only relevant if the result is a store request -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.magnolia-cms.com/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ---------------------------------------------------------------- For list details see http://www.magnolia-cms.com/home/community/mailing-lists.html To unsubscribe, E-mail to: <dev-list-unsubscr...@magnolia-cms.com> ----------------------------------------------------------------