]
Work on ISPN-6071 started by William Burns.
-------------------------------------------
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
Assignee: William Burns
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)?