cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jörg Heinicke (JIRA) <>
Subject [jira] Commented: (COCOON-2151) Sub-optimal implementation of AbstractDoubleMapEventRegistry
Date Tue, 27 Nov 2007 02:07:43 GMT


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 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:

and then mainly

> Sub-optimal implementation of AbstractDoubleMapEventRegistry
> ------------------------------------------------------------
>                 Key: COCOON-2151
>                 URL:
>             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.

View raw message