[infinispan-issues] [JBoss JIRA] (ISPN-6857) OutdatedTopologyException in clustered invalidation cache because StateTransferInterceptor not in the chain

Tristan Tarrant (JIRA) issues at jboss.org
Wed Sep 14 02:38:00 EDT 2016


    [ https://issues.jboss.org/browse/ISPN-6857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13292983#comment-13292983 ] 

Tristan Tarrant commented on ISPN-6857:
---------------------------------------

An Invalidation cache doesn't transfer state, only invalidations, so the "missing" StateTransferInterceptor is not a mistake. However the analysis is correct, the remove should be retried.

> 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
>             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/org/infinispan/factories/InterceptorChainFactory.java#L158
> 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)


More information about the infinispan-issues mailing list