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

Consistent strategy throws NPE for node joining during partition

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • 15.0.2.Final
    • Core
    • None

      If a node joins a cache with a consistent strategy during a partition, an NPE is thrown.

       

      Exception.java
      18:18:44.354 [jgroups-6,jbolina-thinkpadp1gen2-39962] WARN org.infinispan.CLUSTER - ISPN000071: Caught exception when handling command TopologyJoinCommand{cacheName='org.infinispan.LOCKS', origin=jbolina-thinkpadp1gen2-14249, joinInfo=CacheJoinInfo{consistentHashFactory=org.infinispan.distribution.ch.impl.SyncReplicatedConsistentHashFactory@43198721, numSegments=256, numOwners=2, timeout=240000, cacheMode=REPL_SYNC, persistentUUID=06884574-a933-418c-9a97-7fbb09301741, persistentStateChecksum=Optional.empty, capacityFactor=1.0}, viewId=5}
      java.lang.NullPointerException: Cannot invoke "org.infinispan.distribution.ch.ConsistentHash.getNumSegments()" because "stableCH" is null
      	at org.infinispan.topology.ClusterTopologyManagerImpl.distLostDataCheck(ClusterTopologyManagerImpl.java:792)
      	at org.infinispan.partitionhandling.impl.PreferConsistencyStrategy.onJoin(PreferConsistencyStrategy.java:64)
      	at org.infinispan.topology.ClusterCacheStatus.doJoin(ClusterCacheStatus.java:747)
      	at org.infinispan.topology.ClusterTopologyManagerImpl.lambda$handleJoin$4(ClusterTopologyManagerImpl.java:265)
      	at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:684)
      	at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:662)
      	at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2200)
      	at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:144)
      	at org.infinispan.topology.ClusterTopologyManagerImpl.lambda$handleJoin$5(ClusterTopologyManagerImpl.java:265)
      	at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)
      	at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2341)
      	at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)
      	at org.infinispan.topology.ClusterTopologyManagerImpl.handleJoin(ClusterTopologyManagerImpl.java:257)
      	at org.infinispan.commands.topology.CacheJoinCommand.invokeAsync(CacheJoinCommand.java:46)
      	at org.infinispan.remoting.inboundhandler.GlobalInboundInvocationHandler$ReplicableCommandRunner.run(GlobalInboundInvocationHandler.java:156)
      	at org.infinispan.remoting.inboundhandler.GlobalInboundInvocationHandler.handleReplicableCommand(GlobalInboundInvocationHandler.java:133)
      	at org.infinispan.remoting.inboundhandler.GlobalInboundInvocationHandler.handleFromCluster(GlobalInboundInvocationHandler.java:79)
      	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.processRequest(JGroupsTransport.java:1518)
      	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.processMessage(JGroupsTransport.java:1445)
      	at org.infinispan.remoting.transport.jgroups.JGroupsTransport$ChannelCallbacks.up(JGroupsTransport.java:1640)
      	at org.jgroups.JChannel.up(JChannel.java:726)
      	at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:940)
      	at org.jgroups.protocols.FRAG2.up(FRAG2.java:139)
      	at org.jgroups.protocols.FlowControl.up(FlowControl.java:253)
      	at org.jgroups.protocols.FlowControl.up(FlowControl.java:261)
      	at org.jgroups.protocols.pbcast.GMS.up(GMS.java:848)
      	at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:225)
      	at org.jgroups.protocols.UNICAST3.deliverMessage(UNICAST3.java:1134)
      	at org.jgroups.protocols.UNICAST3.addMessage(UNICAST3.java:872)
      	at org.jgroups.protocols.UNICAST3.handleDataReceived(UNICAST3.java:854)
      	at org.jgroups.protocols.UNICAST3.up(UNICAST3.java:466)
      	at org.jgroups.protocols.pbcast.NAKACK2.up(NAKACK2.java:672)
      	at org.jgroups.protocols.VERIFY_SUSPECT2.up(VERIFY_SUSPECT2.java:105)
      	at org.jgroups.protocols.FailureDetection.up(FailureDetection.java:180)
      	at org.jgroups.protocols.FD_SOCK2.up(FD_SOCK2.java:190)
      	at org.jgroups.protocols.MERGE3.up(MERGE3.java:274)
      	at org.jgroups.protocols.Discovery.up(Discovery.java:296)
      	at org.jgroups.stack.Protocol.up(Protocol.java:341)
      	at org.jgroups.protocols.TP.passMessageUp(TP.java:1184)
      	at org.jgroups.util.SubmitToThreadPool$SingleMessageHandler.run(SubmitToThreadPool.java:107)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
      	at java.base/java.lang.Thread.run(Thread.java:1583)
      

       

      Since the cache utilizes a consistent strategy, we shouldn't allow the node to join. We need to update and throw a proper exception.

              rh-ee-jbolina Jose Bolina
              rh-ee-jbolina Jose Bolina
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated: