]
Tristan Tarrant reassigned ISPN-6857:
-------------------------------------
Assignee: Dan Berindei
OutdatedTopologyException in clustered invalidation cache because
StateTransferInterceptor not in the chain
-----------------------------------------------------------------------------------------------------------
Key: ISPN-6857
URL:
https://issues.jboss.org/browse/ISPN-6857
Project: Infinispan
Issue Type: Bug
Affects Versions: 8.1.0.Final
Reporter: Marek Posolda
Assignee: Dan Berindei
Fix For: 8.1.5.Final, 9.0.0.Final, 8.2.5.Final
Attachments: OutdatedTopologyExceptionReproducerTest.java
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/o...
Indeed when I manually added StateTransferInterceptor to my invalidation cache:
{code}
invalidationConfigBuilder.customInterceptors()
.addInterceptor()
.before(NonTransactionalLockingInterceptor.class)
.interceptorClass(StateTransferInterceptor.class);
{code}
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.