Keith Wall created QPIDJMS-366:
----------------------------------
Summary: [Failover] JMS commit hangs forever if peer Closes
gracefully and failover.maxReconnectAttempts exhausted
Key: QPIDJMS-366
URL: https://issues.apache.org/jira/browse/QPIDJMS-366
Project: Qpid JMS
Issue Type: Bug
Components: qpid-jms-client
Reporter: Keith Wall
If failover occurs whilst a JMS commit is in-flight, and that failover exhausts
its {{failover.maxReconnectAttempts}} the JMS commit call is seen to hang
forever. This problem manifests when the connection attempts are failing with
a graceful {{Close}} from the peer. If the connection failure is at a
'transport' level (e.g. Connection refused) the problem does not appear.
Reproduction:
# Start Broker-J 7.0.2
# Go to http://localhost:8080, double click on virtualhost {{default}} in the
virtualhost table to open the virtualhost tab.
# Create queue {{queue}}
# Start IDE with qpid-jms project open (master today - 7e7cebe5)
# Apply HelloWorld patch attached to this JIRA
# Put a breakpoint in {{org.apache.qpid.jms.provider.amqp.AmqpProvider#commit}}
line 693 (i.e. the closing brace of the try/catch the statement immediately
following the pumpToProton())
# Run HelloWorld with attached patch applied under the debugger
# Once the breakpoint is reached, use the console to stop the virtualhost. Do
this by clicking the {{Stop}} button on the virtualhost tab.
# Resume the debugger
# Expected : once failover attempts are exhausted, the JMS {{commit()}} call
should end with an exception - Actual: {{commit()}} continues to hang
indefinitely.
The blocked main thread looks like this:
{noformat}
"main@1" prio=5 tid=0x1 nid=NA waiting
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Unsafe.java:-1)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
at
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
at
org.apache.qpid.jms.provider.ProviderFuture.sync(ProviderFuture.java:103)
at org.apache.qpid.jms.JmsConnection.commit(JmsConnection.java:766)
at
org.apache.qpid.jms.JmsLocalTransactionContext.commit(JmsLocalTransactionContext.java:171)
at org.apache.qpid.jms.JmsSession.commit(JmsSession.java:227)
at org.apache.qpid.jms.example.HelloWorld.main(HelloWorld.java:61)
{noformat}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]