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

Cluster CacheEventFilterConverter wrapping leads to double callbacks

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: 7.2.0.CR1, 7.1.1.Final
    • Fix Version/s: 7.2.0.Final
    • Component/s: Listeners
    • Labels:
      None

      Description

      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.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  galder.zamarreno Galder Zamarreño
                  Reporter:
                  galder.zamarreno Galder Zamarreño
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  2 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: