Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-5429

Cluster CacheEventFilterConverter wrapping leads to double callbacks

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 7.2.0.Final
    • 7.2.0.CR1, 7.1.1.Final
    • Listeners
    • None

      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.

              rh-ee-galder Galder ZamarreƱo
              rh-ee-galder Galder ZamarreƱo
              Archiver:
              rhn-support-adongare Amol Dongare

                Created:
                Updated:
                Resolved:
                Archived: