[ http://jira.magnolia.info/browse/MAGNOLIA-596?page=comments#action_11555 ]
Philipp Bracher commented on MAGNOLIA-596: ------------------------------------------ Sounds great. Can you create a patch? > Option to set lifetime on allowed cache mappings > ------------------------------------------------ > > Key: MAGNOLIA-596 > URL: http://jira.magnolia.info/browse/MAGNOLIA-596 > Project: magnolia wcm > Type: New Feature > Components: core > Reporter: Thomas Duffey > Assignee: Boris Kraft > Priority: Minor > > Original Estimate: 1 day > Remaining: 1 day > > Add a new "lifetime" node to the allowed cache URI mappings. This node > specifies an amount of time that a page matching this URI can be retrieved > from the cache. This adds some flexibility to pages where you have some > dynamic content but for performance reasons want to show a snapshot of that > dynamic content and have it refreshed periodically. > I currently have patches against 2.1.3 and will look into updating them for > 2.2 but the implementation is pretty simple: > 1) Update info.magnolia.cms.beans.config.Cache.cacheCacheableURIMappings() to > retrieve the "lifetime" node and store its value along with the "allowed" > value in the cachedCacheableURIMapping map, e.g., > NodeData lifetime = container.getNodeData(CACHE_LIFETIME_NODE); > long l = lifetime.getLong(); > // values[0] := allowed > // values[1] := lifetime, <= 0 is eternity > cachedCacheableURIMapping.put(p, new Object[] { > BooleanUtils.toBooleanObject(allow), new Long(l) }); > 2) Add new getLifetime(HttpServletRequest request) method to > info.magnolia.cms.beans.config.Cache. It looks just like > isCacheable(HttpServletRequest request) except it retrieves the lifetime > value from the map. > 3) Update info.magnolia.cms.beans.config.Cache.isCacheable() to retrieve the > "allowed" value from the cachedCacheableURIMapping map. This assumes an > implementation like in (1) above where I'm storing both the value of > "allowed" and the lifetime in the value of the map. > 4) Add new isExpired(HttpServletRequest request) method to > info.magnolia.cms.beans.runtime.Cache. This checks that the sum of the > cached item's creation time and lifetime is less than the current time, e.g., > public static boolean isExpired(HttpServletRequest request) { > long ctime = Cache.getCreationTime(request); > long lifetime = info.magnolia.cms.beans.config.Cache.getLifetime(request); > return lifetime <= 0 ? false : new java.util.Date().getTime() > (ctime + > lifetime); > } > 5) Update info.magnolia.cms.core.CacheHandler.cacheURI() to check if an item > that is currently cached is expired. If this is the case, the item must be > removed from the cache and the cache handler should continue, e.g., > if (Cache.isCached(request) || CacheHandler.hasRedirect(request)) { > if (Cache.isExpired(request)) { > CacheHandler.flushResource(request); > } else { > return; > } > 6) Add new flushResource(HttpServletRequest request) method to > info.magnolia.cms.core.CacheHandler that removes the requested page from the > cache, e.g., > public static void flushResource(HttpServletRequest request) { > flushResource(CACHE_DIRECTORY + DEFAULT_STORE + Path.getURI(request)); > flushResource(CACHE_DIRECTORY + COMPRESSED_STORE + Path.getURI(request)); > } > 7) Modify info.magnolia.cms.servlets.EntryServlet to check if a cached item > is expired, e.g., > // try to stream from cache first > if (cacheable && Cache.isCached(req) && !Cache.isExpired(req)) { > if (CacheHandler.streamFromCache(req, res)) { > return; // if success return > } > } > That's about it, there is still some weirness if you restart Tomcat w/o > clearing out the cache but otherwise it's working fine. It would be more > kind to the users to specify the lifetime in seconds or minutes rather than > milliseconds. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.magnolia.info/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ---------------------------------------------------------------- for list details see http://www.magnolia.info/en/magnolia/developer.html ----------------------------------------------------------------