[ 
https://issues.apache.org/jira/browse/COCOON-2151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12545680
 ] 

Jörg Heinicke commented on COCOON-2151:
---------------------------------------

Ard Schrijvers wrote at COCOON-2146#action_12545506:
IMO, the AbstractDoubleMapEventRegistry is a very bad implementation, and OOM 
sensitive. I was facing sites needing a restart every few days (very high 
traffic sites, > 100.000 pages ) because of the double map event registry in 
combination with ehcache, It has been more than a year ago, so I might be off 
at some places, but :

The AbstractDoubleMapEventRegistry used for event caching was build a long time 
ago (I wasn't around) and was based on an internal cocoon cache, which in turn 
was managed by the StoreJanitor. This internal cache has been replaced by 
ehcache, or jcscache. These caches handle their own cache (TTL, LRU, ETERNAL, 
etc etc). This means, that when this cache decides to remove a cached entry, 
this remove was not initialized by the StoreJanitor, hence not propagated to 
the event registry. This ends up in an ever growing event registry.

Also, I totally did not like the AbstractDoubleMapEventRegistry. Keeping double 
mapped maps in sync....it kind of is stupid. And, this is exactly the thing you 
use WeakReferences for. So I rebuild the registry for our projects to use 
WeakReferences. Only problem I faced, was that for a reason I have never been 
able to find or reproduce outside cocoon, it didn't play well with ehcache 
because references seemed to change. Therefor I did implement it in combination 
with JCSCache (which by the way performed better). While I was busy I changed 
the registry to enable multiple caches because I wanted filesystem caches for 
binary repository data, a seperate cache for repository xml files, and a 
seperate one for pipelines.

I am not sure if anyone is interested... :-) Because of the ehcache reference 
problems and the fact that I had no easy way (without reading the entire cache 
at startup) to have a persistent cache with a registry (WeakReferences cannot 
be persisted ofcourse) I never considered the code suitable for Cocoon. OTOH, I 
left EHCache without problems, and IMO, needing a persistent cache does seem to 
me that you should have implemented your application differently. I have always 
been concerned performance, and I just know that an uncached pipepline with 
external repository sources, with webdav calls en searches, can easily finish 
within 50-100 ms. If you must rely on your cache that havily that it should 
survive a restart, I think you are misusing cocoon's cache anyway. Just my 2 
cents

Anyway, if anybody is interested, the code is over here:

https://svn.hippocms.org/repos/hippo/hippo-cocoon-extensions/trunk/eventcache/src/java/org/apache/cocoon/caching/impl/

and then mainly AbstractWeakRefMapEventRegistry.java.

> Sub-optimal implementation of AbstractDoubleMapEventRegistry
> ------------------------------------------------------------
>
>                 Key: COCOON-2151
>                 URL: https://issues.apache.org/jira/browse/COCOON-2151
>             Project: Cocoon
>          Issue Type: Improvement
>          Components: Blocks: Event Cache
>    Affects Versions: 2.1.10, 2.2-dev (Current SVN)
>            Reporter: Jörg Heinicke
>
> This is just a follow-up from COCOON-2146 where Ard pointed out some issues 
> with AbstractDoubleMapEventRegistry. I just didn't want to lose the 
> information when I actually fixed the issue. So I will add it here.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to