[ 
https://issues.apache.org/jira/browse/QPID-2808?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Robbie Gemmell updated QPID-2808:
---------------------------------

    Fix Version/s:     (was: 0.7)

Updating 'Fix For'  to Unknown on issues not targeted for 0.8

> JMS client failover fails due to a locking issue present in the 
> Connection/Session classes in the transport package.
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-2808
>                 URL: https://issues.apache.org/jira/browse/QPID-2808
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>            Reporter: Rajith Attapattu
>            Assignee: Rajith Attapattu
>
> Description of problem:
> ---------------------------------
> If the JMS client is connected to a cluster and if the broker the client is 
> connected to, is killed while the client is in the midst of producing 
> messages, the client appears to be hung and eventually the failover times out.
> The problem only occurs if the producer (or consumer) is using a an 
> addressing string. If you run the same example using the BURL syntax then 
> there is no
> issue.
> (*)The resume method in o.a.q.transport.Connection takes a lock when in 
> enters the resume method and in turn it tries to call the "resumed" methods 
> in the AMQSession_0_10 class. 
> (*)That method will essentially recreate the producers and consumers which 
> will cause the address string to be re-evaluated. In doing so a synchronous 
> ExchangeQuery is made.
> (*) The IoReceiverThread tries to dispatch it, but unable to do as it cannot 
> grab the 'lock' as it is already held by the failover thread. The failover 
> thread is not releasing the lock as it is waiting for the response
> from the exchange query method.
> (*) Hence the client appears to be stuck until the wait for the response 
> times out and the failover operation fails :)
> Below is a partial thread dump that illustrates the above issue.
> Following are two snippets from a thread dump that illustrates the issue.
> "IoReceiver - /10.16.44.241:5673" daemon prio=10 tid=0x000000000cdf0800
> nid=0x1afe waiting for monitor entry [0x0000000041c1a000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>  at org.apache.qpid.transport.Connection.getSession(Connection.java:440)
>  - waiting to lock <0x00002aab6075e0e8> (a java.lang.Object)
>  at org.apache.qpid.transport.Connection.dispatch(Connection.java:380)
>  at
> org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:64)
>  at
> org.apache.qpid.transport.ConnectionDelegate.handle(ConnectionDelegate.java:40)
>  at
> org.apache.qpid.transport.MethodDelegate.sessionAttached(MethodDelegate.java:68)
>  at 
> org.apache.qpid.transport.SessionAttached.dispatch(SessionAttached.java:91)
>  at
> org.apache.qpid.transport.ConnectionDelegate.control(ConnectionDelegate.java:49)
>  at
> org.apache.qpid.transport.ConnectionDelegate.control(ConnectionDelegate.java:40)
>  at org.apache.qpid.transport.Method.delegate(Method.java:163)
>  at org.apache.qpid.transport.Connection.received(Connection.java:348)
>  at org.apache.qpid.transport.Connection.received(Connection.java:55)
>  at org.apache.qpid.transport.network.Assembler.emit(Assembler.java:98)
>  at org.apache.qpid.transport.network.Assembler.assemble(Assembler.java:184)
>  at org.apache.qpid.transport.network.Assembler.frame(Assembler.java:132)
>  at org.apache.qpid.transport.network.Frame.delegate(Frame.java:133)
>  at org.apache.qpid.transport.network.Assembler.received(Assembler.java:103)
>  at org.apache.qpid.transport.network.Assembler.received(Assembler.java:48)
>  at org.apache.qpid.transport.network.InputHandler.next(InputHandler.java:187)
>  at
> org.apache.qpid.transport.network.InputHandler.received(InputHandler.java:103)
>  at
> org.apache.qpid.transport.network.InputHandler.received(InputHandler.java:42)
>  at org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:128)
>  at java.lang.Thread.run(Thread.java:636)
> IoReceiver - localhost/127.0.0.1:5672" daemon prio=10 tid=0x00002aabbc1a8000
> nid=0x1aee in Object.wait() [0x0000000040bee000]
>    java.lang.Thread.State: TIMED_WAITING (on object monitor)
>  at java.lang.Object.wait(Native Method)
>  - waiting on <0x00002aab6155be60> (a
> org.apache.qpid.transport.Session$ResultFuture)
>  at org.apache.qpid.transport.util.Waiter.await(Waiter.java:54)
>  at org.apache.qpid.transport.Session$ResultFuture.get(Session.java:837)
>  - locked <0x00002aab6155be60> (a
> org.apache.qpid.transport.Session$ResultFuture)
>  at org.apache.qpid.transport.Session$ResultFuture.get(Session.java:859)
>  at
> org.apache.qpid.client.AMQSession_0_10.resolveAddressType(AMQSession_0_10.java:1219)
>  at
> org.apache.qpid.client.AMQSession_0_10.handleAddressBasedDestination(AMQSession_0_10.java:1160)
>  at
> org.apache.qpid.client.BasicMessageProducer_0_10.declareDestination(BasicMessageProducer_0_10.java:81)
>  at
> org.apache.qpid.client.BasicMessageProducer.resubscribe(BasicMessageProducer.java:174)
>  at
> org.apache.qpid.client.AMQSession.resubscribeProducers(AMQSession.java:2782)
>  at org.apache.qpid.client.AMQSession.resubscribe(AMQSession.java:2038)
>  at org.apache.qpid.client.AMQSession_0_10.resumed(AMQSession_0_10.java:871)
>  at org.apache.qpid.transport.Session.resume(Session.java:265)
>  - locked <0x00002aab61761350> (a [Lorg.apache.qpid.transport.Method;)
>  at org.apache.qpid.transport.Connection.resume(Connection.java:452)
>  - locked <0x00002aab6075e0e8> (a java.lang.Object)
>  at
> org.apache.qpid.client.AMQConnectionDelegate_0_10.closed(AMQConnectionDelegate_0_10.java:243)
>  at org.apache.qpid.transport.Connection.closed(Connection.java:530)
>  at org.apache.qpid.transport.network.Assembler.closed(Assembler.java:113)
>  at
> org.apache.qpid.transport.network.InputHandler.closed(InputHandler.java:202)
>  at org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:150)
>  at java.lang.Thread.run(Thread.java:636)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to