[
https://issues.jboss.org/browse/ISPN-6857?page=com.atlassian.jira.plugin....
]
Marek Posolda updated ISPN-6857:
--------------------------------
Description:
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.
was:
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.
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
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.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)