[infinispan-issues] [JBoss JIRA] (ISPN-6071) NullPointerException when executing RemoveExpiredCommand

Alexandre Nikolov (JIRA) issues at jboss.org
Thu Mar 31 02:44:00 EDT 2016


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

Alexandre Nikolov commented on ISPN-6071:
-----------------------------------------

I am getting the same exception:

08:23:58,103 ERROR [org.infinispan.interceptors.InvocationContextInterceptor] (persistence-thread--p26-t5) ISPN000136: Error executing command RemoveExpiredCommand, writing keys [intraday]: org.infinispan.remoting.RemoteException: ISPN000217: Received exception from BRAINIAK-46970, see cause for remote stack trace
	at org.infinispan.remoting.transport.AbstractTransport.checkResponse(AbstractTransport.java:44)
	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.checkRsp(JGroupsTransport.java:760)
	at org.infinispan.remoting.transport.jgroups.JGroupsTransport.lambda$invokeRemotelyAsync$73(JGroupsTransport.java:612)
	at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602)
	at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
	at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:474)
	at java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:1962)
	at org.infinispan.remoting.transport.jgroups.RspListFuture.futureDone(RspListFuture.java:31)
	at org.jgroups.blocks.Request.checkCompletion(Request.java:169)
	at org.jgroups.blocks.GroupRequest.receiveResponse(GroupRequest.java:147)
	at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:398)
	at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:250)
	at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:684)
	at org.jgroups.JChannel.up(JChannel.java:738)
	at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:1029)
	at org.jgroups.protocols.tom.TOA.up(TOA.java:121)
	at org.jgroups.protocols.SEQUENCER.up(SEQUENCER.java:248)
	at org.jgroups.protocols.FRAG2.up(FRAG2.java:165)
	at org.jgroups.protocols.FlowControl.up(FlowControl.java:394)
	at org.jgroups.protocols.FlowControl.up(FlowControl.java:383)
	at org.jgroups.protocols.pbcast.GMS.up(GMS.java:1045)
	at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:234)
	at org.jgroups.protocols.UNICAST3.deliverMessage(UNICAST3.java:1064)
	at org.jgroups.protocols.UNICAST3.handleDataReceived(UNICAST3.java:779)
	at org.jgroups.protocols.UNICAST3.up(UNICAST3.java:426)
	at org.jgroups.protocols.pbcast.NAKACK2.up(NAKACK2.java:652)
	at org.jgroups.protocols.VERIFY_SUSPECT.up(VERIFY_SUSPECT.java:155)
	at org.jgroups.protocols.FD_ALL.up(FD_ALL.java:200)
	at org.jgroups.protocols.FD_SOCK.up(FD_SOCK.java:310)
	at org.jgroups.protocols.MERGE3.up(MERGE3.java:285)
	at org.jgroups.protocols.Discovery.up(Discovery.java:295)
	at org.jgroups.protocols.TP.passMessageUp(TP.java:1577)
	at org.jgroups.protocols.TP$MyHandler.run(TP.java:1796)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: org.infinispan.commons.CacheException: Problems invoking command.
	at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:163)
	at org.jgroups.blocks.RequestCorrelator.handleRequest(RequestCorrelator.java:460)
	at org.jgroups.blocks.RequestCorrelator.receiveMessage(RequestCorrelator.java:377)
	at org.jgroups.blocks.RequestCorrelator.receive(RequestCorrelator.java:250)
	at org.jgroups.blocks.MessageDispatcher$ProtocolAdapter.up(MessageDispatcher.java:684)
	at org.jgroups.JChannel.up(JChannel.java:738)
	at org.jgroups.stack.ProtocolStack.up(ProtocolStack.java:1029)
	at org.jgroups.protocols.tom.TOA.up(TOA.java:121)
	at org.jgroups.protocols.SEQUENCER.up(SEQUENCER.java:248)
	at org.jgroups.protocols.FRAG2.up(FRAG2.java:165)
	at org.jgroups.protocols.FlowControl.up(FlowControl.java:383)
	at org.jgroups.protocols.FlowControl.up(FlowControl.java:394)
	at org.jgroups.protocols.pbcast.GMS.up(GMS.java:1045)
	at org.jgroups.protocols.pbcast.STABLE.up(STABLE.java:234)
	at org.jgroups.protocols.UNICAST3.up(UNICAST3.java:435)
	at org.jgroups.protocols.pbcast.NAKACK2.deliver(NAKACK2.java:961)
	at org.jgroups.protocols.pbcast.NAKACK2.handleMessage(NAKACK2.java:843)
	at org.jgroups.protocols.pbcast.NAKACK2.up(NAKACK2.java:618)
	... 10 more
*_Caused by: java.lang.NullPointerException
	at org.infinispan.commands.write.RemoveExpiredCommand.setParameters(RemoveExpiredCommand.java:142)
	at org.infinispan.commands.RemoteCommandsFactory.fromStream(RemoteCommandsFactory.java:187)_*
	at org.infinispan.marshall.exts.ReplicableCommandExternalizer.readObject(ReplicableCommandExternalizer.java:93)
	at org.infinispan.marshall.exts.ReplicableCommandExternalizer.readObject(ReplicableCommandExternalizer.java:39)
	at org.infinispan.marshall.core.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:475)
	at org.infinispan.marshall.core.ExternalizerTable.readObject(ExternalizerTable.java:234)
	at org.infinispan.marshall.core.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:149)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:354)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
	at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
	at org.infinispan.marshall.exts.ReplicableCommandExternalizer.readParameters(ReplicableCommandExternalizer.java:109)
	at org.infinispan.marshall.exts.CacheRpcCommandExternalizer.readObject(CacheRpcCommandExternalizer.java:158)
	at org.infinispan.marshall.exts.CacheRpcCommandExternalizer.readObject(CacheRpcCommandExternalizer.java:68)
	at org.infinispan.marshall.core.ExternalizerTable$ExternalizerAdapter.readObject(ExternalizerTable.java:475)
	at org.infinispan.marshall.core.ExternalizerTable.readObject(ExternalizerTable.java:234)
	at org.infinispan.marshall.core.JBossMarshaller$ExternalizerTableProxy.readObject(JBossMarshaller.java:149)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:354)
	at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
	at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
	at org.infinispan.commons.marshall.jboss.AbstractJBossMarshaller.objectFromObjectStream(AbstractJBossMarshaller.java:134)
	at org.infinispan.marshall.core.VersionAwareMarshaller.objectFromByteBuffer(VersionAwareMarshaller.java:101)
	at org.infinispan.commons.marshall.AbstractDelegatingMarshaller.objectFromByteBuffer(AbstractDelegatingMarshaller.java:80)
	at org.infinispan.remoting.transport.jgroups.MarshallerAdapter.objectFromBuffer(MarshallerAdapter.java:28)
	at org.infinispan.remoting.transport.jgroups.CommandAwareRpcDispatcher.handle(CommandAwareRpcDispatcher.java:143)

My set-up - replicated cache on 2 Infinispan instances running embedded in a WildFly 10 cluster of 2 instances and a load-balancer:

infinispan.xml

<infinispan
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:infinispan:config:8.1 http://www.infinispan.org/schemas/infinispan-config-8.1.xsd"
    xmlns="urn:infinispan:config:8.1">
    <jgroups>
        <stack-file name="udp" path="jgroups.xml"/>
    </jgroups>

    <cache-container name="insights" shutdown-hook="REGISTER" default-cache="default">
        <jmx duplicate-domains="true"/>

        <transport stack="udp" cluster="insights-cache" />
        
        <replicated-cache mode="ASYNC" name="default" 
                          unreliable-return-values="true" 
                          deadlock-detection-spin="100">
            
            <eviction strategy="LRU" size="800" type="COUNT" />
            <locking concurrency-level="1000" 
                     isolation="REPEATABLE_READ" 
                     striping="false" acquire-timeout="10000"/> 

            <persistence passivation="true" >
                <file-store path="/cache/file"  
                            fetch-state="true" preload="true"
                            shared="true">
                    <write-behind flush-lock-timeout="30000" 
                                  modification-queue-size="1000" 
                                  thread-pool-size="1" 
                                  shutdown-timeout="10000"/>
                </file-store>
            </persistence>
        </replicated-cache>
        
        <replicated-cache name="intraday">
            <expiration lifespan="86400000"/>
        </replicated-cache>
    </cache-container>
</infinispan>

and jgroups.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="urn:org:jgroups"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.6.xsd">
   <UDP mcast_addr="${jgroups.udp.mcast_addr:228.6.7.8}"
        mcast_port="${jgroups.udp.mcast_port:46655}"
        ucast_send_buf_size="1m"
        mcast_send_buf_size="1m"
        ucast_recv_buf_size="20m"
        mcast_recv_buf_size="25m"
        ip_ttl="${jgroups.ip_ttl:2}"
        thread_naming_pattern="pl"
        enable_diagnostics="false"

        thread_pool.min_threads="${jgroups.thread_pool.min_threads:2}"
        thread_pool.max_threads="${jgroups.thread_pool.max_threads:30}"
        thread_pool.keep_alive_time="60000"
        thread_pool.queue_enabled="false"

        internal_thread_pool.min_threads="${jgroups.internal_thread_pool.min_threads:5}"
        internal_thread_pool.max_threads="${jgroups.internal_thread_pool.max_threads:20}"
        internal_thread_pool.keep_alive_time="60000"
        internal_thread_pool.queue_enabled="true"
        internal_thread_pool.queue_max_size="500"

        oob_thread_pool.min_threads="${jgroups.oob_thread_pool.min_threads:20}"
        oob_thread_pool.max_threads="${jgroups.oob_thread_pool.max_threads:200}"
        oob_thread_pool.keep_alive_time="60000"
        oob_thread_pool.queue_enabled="false"
   />
   <PING />
   <MERGE3 min_interval="10000" 
           max_interval="30000" 
   />
   <FD_SOCK />
   <FD_ALL timeout="60000" 
           interval="15000" 
           timeout_check_interval="5000" 
   />
   <VERIFY_SUSPECT timeout="5000" 
   />
   <pbcast.NAKACK2 xmit_interval="1000"
                   xmit_table_num_rows="50"
                   xmit_table_msgs_per_row="1024"
                   xmit_table_max_compaction_time="30000"
                   max_msg_batch_size="100"
                   resend_last_seqno="true"
   />
   <UNICAST3 xmit_interval="500"
             xmit_table_num_rows="50"
             xmit_table_msgs_per_row="1024"
             xmit_table_max_compaction_time="30000"
             max_msg_batch_size="100"
             conn_expiry_timeout="0"
   />
   <pbcast.STABLE stability_delay="500"
                  desired_avg_gossip="5000"
                  max_bytes="1M"
   />
   <pbcast.GMS print_local_addr="false"
               join_timeout="15000"
   />
   <UFC max_credits="2m" 
        min_threshold="0.40"
   />
   <MFC max_credits="2m" 
        min_threshold="0.40"
   />
   <FRAG2 />
   <SEQUENCER />
    <tom.TOA />
</config>


> NullPointerException when executing RemoveExpiredCommand
> --------------------------------------------------------
>
>                 Key: ISPN-6071
>                 URL: https://issues.jboss.org/browse/ISPN-6071
>             Project: Infinispan
>          Issue Type: Bug
>          Components: Expiration
>    Affects Versions: 8.0.2.Final
>            Reporter: Jason Hoetger
>
> I'm running Infinispan 8.0.2 in a clustered environment with a replicated cache with a single file cache store. I'm seeing some NullPointerExceptions when Infinispan executes the RemoveExpiredCommand. Here's a snippet from the stack trace:
> {{ISPN000136: Error executing command RemoveExpiredCommand, writing keys [...large key here...]
> ...
> Caused by: java.lang.NullPointerException: null
> 	at org.infinispan.commands.write.RemoveExpiredCommand.setParameters(RemoveExpiredCommand.java:142)}}
> Here's RemoveExpiredCommand#setParameters(...):
> {{   @Override
>    public void setParameters(int commandId, Object[] args) {
>       if (commandId != COMMAND_ID) throw new IllegalStateException("Invalid method id");
>       int i = 0;
>       commandInvocationId = (CommandInvocationId) args[i++];
>       key = args[i++];
>       value = args[i++];
>       lifespan = (long) args[i++];
>    }}}
> Line 142 is the cast of assignment of args[3] to primitive type long, which is causing the NPE. lifespan is actually a Long, not a long, and the #perform() method seems to anticipate null lifespans at line 72:
> {{         // If the provided lifespan is null, that means it is a store removal command, so we can't compare lifespan
>          if (lifespan == null) {}}
> Could this be fixed by simply changing the cast at line 142 from (long) to (Long)?



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the infinispan-issues mailing list