]
Galder Zamarreño resolved ISPN-5429.
------------------------------------
Fix Version/s: (was: 7.2.0.Final)
Resolution: Deferred
The original cause of the double callbacks has been fixed but double callbacks still
happen for a different reason. The issue will be fixed at a later stage.
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
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.