qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robbie Gemmell (JIRA)" <j...@apache.org>
Subject [jira] Updated: (QPID-2808) JMS client failover fails due to a locking issue present in the Connection/Session classes in the transport package.
Date Mon, 01 Nov 2010 10:11:31 GMT

     [ 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:dev-subscribe@qpid.apache.org


Mime
View raw message