]
Adrian Nistor updated ISPN-5429:
--------------------------------
Status: Resolved (was: Pull Request Sent)
Resolution: Done
Test for duplicate callbacks are now integrated in master. Thanks [~galder.zamarreno] and
[~william.burns]!
Cluster CacheEventFilterConverter wrapping leads to double callbacks
--------------------------------------------------------------------
Key: ISPN-5429
URL:
https://issues.jboss.org/browse/ISPN-5429
Project: Infinispan
Issue Type: Bug
Components: Listeners
Affects Versions: 7.2.0.CR1, 7.1.1.Final
Reporter: Galder ZamarreƱo
Assignee: Galder ZamarreƱo
Fix For: 7.2.0.Final
This was spotted by Pierre Sutra from University of Neuchatel:
When a CacheEventFilterConverter is registered with remote event listeners, and running
in a cluster, once the CacheEventFilterConverter instance is replicated, the notion that
its both a filter AND converter is lost because BaseCacheEntryListenerInvocation's
constructor determines that {{filterAndConvert}} is false.
The reason this happens is because after clustering it, the
ClusterListenerReplicateCallable.call() wraps the {{filter}} into an
{{AbstractCacheEventFilterConverter}} implementation, which does not keep the referential
equality that BaseCacheEntryListenerInvocation's constructor checks.
A simple way to avoid this is to implement {{equals}} in the
AbstractCacheEventFilterConverter implementation and use referential equality. Then,
switching BaseCacheEntryListenerInvocation's constructors referential equality by a
call to {{equals}} is enough to solve the issue.
The reason this bug was detected is because without a fix for it, the filter + converter
gets two callbacks instead of one. I've added tests to verify that the number
callbacks expected is the correct one.