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

OutdatedTopologyException in clustered invalidation cache because StateTransferInterceptor not in the chain

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
    • 8.1.0.Final, 8.2.4.Final, 9.0.0.Final
    • None
    • None

      I have the following setup:

      • 2 nodes in cluster with mode INVALIDATION_SYNC. No-transaction cache.
      • Node1 is started
      • Called "cache.remove" on some key on node1. At the same time, node2 is starting, which is causing topology change.
      • The "cache.remove" call on node1 is throwing OutdatedTopologyException.

      I found the cause is that StateTransferInterceptor is not added in InterceptorChain during INVALIDATION mode. It's just available during REPLICATION or DISTRIBUTED modes - https://github.com/infinispan/infinispan/blob/master/core/src/main/java/org/infinispan/factories/InterceptorChainFactory.java#L158

      Indeed when I manually added StateTransferInterceptor to my invalidation cache:

      invalidationConfigBuilder.customInterceptors()
          .addInterceptor()
          .before(NonTransactionalLockingInterceptor.class)
          .interceptorClass(StateTransferInterceptor.class);
      

      I can see that issue is gone as OutdatedTopologyException is catched and command is retried with new topology.

      I am attaching the Java unit test for reproducing issue. On my laptop when I run it, I can almost always simulate the issue.

              dberinde@redhat.com Dan Berindei (Inactive)
              mposolda@redhat.com Marek Posolda
              Archiver:
              rhn-support-adongare Amol Dongare

                Created:
                Updated:
                Resolved:
                Archived: