Mario Schlipf created QPIDJMS-474:
-------------------------------------
Summary: Race condition in
JmsLocalTransactionContext.onConnectionInterrupted leading to NPE
Key: QPIDJMS-474
URL: https://issues.apache.org/jira/browse/QPIDJMS-474
Project: Qpid JMS
Issue Type: Bug
Components: qpid-jms-client
Affects Versions: 0.45.0
Reporter: Mario Schlipf
Hi,
I am using qpid-cms-client version 0.39.0, but I can see that the same problem
exists in the current version.
The function `JmsLocalTransactionContext.onConnectionInterrupted` is missing a
null-check for the `transactionInfo` field.
This function is called from `JmsSession.onConnectionInterrupted`. If
`transactionInfo` is null, this leads to the fact that consumers and producers
are not properly notified of the interrupted connection.
I am using qpid-jms-client in conjunction with Spring's
`SingleConnectionFactory`. I can see rare cases where `transactionInfo` is null
and in which the SpringConnectionFactory will not be informed about the
transaction loss. In these cases, there is no automatic reconnect from Spring.
Below some logging when the NPE occurs:
```
2019-09-19T08:39:17,141 [WARN ] [AmqpProvider :(2):[amqps://10.0.0.12:5672]]
AbstractEventExecutor - A task raised an exception. Task:
org.apache.qpid.jms.provider.amqp.AmqpProvider$$Lambda$327/2054861790@467bfdd
java.lang.NullPointerException: null
at
org.apache.qpid.jms.JmsLocalTransactionContext.onConnectionInterrupted(JmsLocalTransactionContext.java:333)
~[qpid-jms-client-0.39.0.jar!/:?]
at
org.apache.qpid.jms.JmsSession.onConnectionInterrupted(JmsSession.java:1340)
~[qpid-jms-client-0.39.0.jar!/:?]
at
org.apache.qpid.jms.JmsConnection.onConnectionFailure(JmsConnection.java:1356)
~[qpid-jms-client-0.39.0.jar!/:?]
at
org.apache.qpid.jms.provider.amqp.AmqpProvider.fireProviderException(AmqpProvider.java:1069)
~[qpid-jms-client-0.39.0.jar!/:?]
at
org.apache.qpid.jms.provider.amqp.AmqpProvider.lambda$onTransportClosed$18(AmqpProvider.java:867)
~[qpid-jms-client-0.39.0.jar!/:?]
at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]
at
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:315)
~[netty-transport-native-epoll-4.1.29.Final-linux-x86_64.jar!/:4.1.29.Final]
at
io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
~[netty-common-4.1.29.Final.jar!/:4.1.29.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
```
My suspicion is that this NPE is responsible for the exception not properly
proparagated, but I am still investigating.
It would help very much if anyone from the Qpid team could validate this as
well.
Thanks
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]