]
Bela Ban resolved JGRP-2261.
----------------------------
Resolution: Done
This is caused by filter HAS_HEADER not checking for null messages. Null messages can
happen when MessageBatch.remove(msg) is called.
Fixed by adding a null check to the HAS_HEADER filter.
NPE in FD_ALL2
--------------
Key: JGRP-2261
URL:
https://issues.jboss.org/browse/JGRP-2261
Project: JGroups
Issue Type: Bug
Affects Versions: 4.0.10
Environment: WildFly 12.0.0.Final
Reporter: Rich DiCroce
Assignee: Bela Ban
Fix For: 4.0.12
I'm seeing a NPE in FD_ALL2 from time to time. Not consistent but the reason
isn't hard to see. Stack trace:
{code}
16:08:06,244 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) Exception in thread "thread-10,ee,RCD_GP (flags=0),
site-id=DEFAULT, rack-id=null, machine-id=null)" java.lang.NullPointerException
16:08:06,244 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at
org.jgroups.protocols.FD_ALL2.lambda$new$0(FD_ALL2.java:83)
16:08:06,245 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at
org.jgroups.util.MessageBatch.replaceIf(MessageBatch.java:220)
16:08:06,245 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at org.jgroups.protocols.FD_ALL2.up(FD_ALL2.java:186)
16:08:06,245 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at org.jgroups.stack.Protocol.up(Protocol.java:372)
16:08:06,245 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at org.jgroups.stack.Protocol.up(Protocol.java:372)
16:08:06,246 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at org.jgroups.stack.Protocol.up(Protocol.java:372)
16:08:06,246 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at org.jgroups.protocols.TP.passBatchUp(TP.java:1274)
16:08:06,246 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at
org.jgroups.util.SubmitToThreadPool$BatchHandler.passBatchUp(SubmitToThreadPool.java:140)
16:08:06,246 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at
org.jgroups.util.SubmitToThreadPool$BatchHandler.run(SubmitToThreadPool.java:136)
16:08:06,246 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
16:08:06,246 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
16:08:06,247 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at
org.jboss.as.clustering.jgroups.ClassLoaderThreadFactory.lambda$newThread$0(ClassLoaderThreadFactory.java:52)
16:08:06,247 ERROR [stderr] (thread-10,ee,RCD_GP (flags=0), site-id=DEFAULT,
rack-id=null, machine-id=null)) at java.lang.Thread.run(Thread.java:748)
{code}
HAS_HEADER is assuming msg is non-null, but MessageBatch makes it clear that it's
valid for elements of the batch to be null, and replaceIf() doesn't perform a null
check.