cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ellis Pritchard (JIRA)" <>
Subject [jira] Reopened: (COCOON-2146) Using EventAware cache implementation breaks persistent cache restore on restart
Date Tue, 27 Nov 2007 18:15:43 GMT


Ellis Pritchard reopened COCOON-2146:

Not sure whether to reopen thisbug, or treat this as a 'sub-optimal' implementation issue...(!)

When using the DefaultEventRegistryImpl the functionality now works as expected (events are
persisted and restored) after the patch applied in COCOON-2146.

However, there's still a problem with StoreEventRegistryImpl.

The behaviour is that it doesn't seem to actually write/restore any event entries: the maps
in the EventRegistryDataWrapper are empty (but not null) after restart, even though the actual
cache entry (key EVENTREGWRAPPER) was found in the Store, and the entries were present when
persist() was called.

The effect of this is to correctly restore the cached entries, but discard all the events,
which means that event-flushes don't work any more, which is not a good thing.

I've tracked this down to the fact that AbstractDoubleMapEventRepository#dispose() which performs
the persist(), then immediately clear()s the maps, WHICH HAVEN'T YET BEEN WRITTEN TO DISK

This code has probably never worked :)

Patches to follow; I propose modifying dispose() to null the map fields, but not perform clear()
on them.

> Using EventAware cache implementation breaks persistent cache restore on restart
> --------------------------------------------------------------------------------
>                 Key: COCOON-2146
>                 URL:
>             Project: Cocoon
>          Issue Type: Bug
>          Components: Blocks: Event Cache
>    Affects Versions: 2.1.10
>            Reporter: Ellis Pritchard
>            Assignee: Jörg Heinicke
>            Priority: Minor
>             Fix For: 2.1.11-dev (Current SVN)
>         Attachments: patch.txt
> In revision 412307 (Cocoon 2.1.10), AbstractDoubleMapEventRegistry and EventRegistryDataWrapper
were changed (without an informative SVN comment!) to use the commons MultiValueMap instead
of the MultiHashMap; I presume this was done in good faith because the latter map is deprecated
and will be removed from Apache commons-collections 4.0
> However, as a result, the persistent cache cannot be restored if the EventAware cache
implementation is used, since MultiValueMap is not Serializable! The old MultiHashMap was...
> Depending on whether StoreEventRegistryImpl or DefaultEventRegistryImpl is used, either
the event cache index is never written (ehcache doesn't store non-serializable objects on
disk), or a is thrown (and caught, causing a full cache-clear)
when attempting to restore the event cache index.
> This is Major for us, since we use Event-based caching alot, and this is causing the
*entire* cache to no-longer persist across restarts (it's been like that for 8 months, since
I upgraded Cocoon to 2.1.10 in the last week I was working here, and now I'm back, they've
actually noticed!!)
> Work-around at the moment is to down-grade AbstractDoubleMapEventRegistry and EventRegistryDataWrapper
to the 2.1.9 versions (pre-412307), which works so long as Apache-commons 3.x is still in

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

View raw message