activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Yuriy Sidelnikov (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AMQ-4561) Deadlock in DemandForwardingBridgeSupport class if ConsumerInfo message has arrived before BrokerInfo message.
Date Wed, 29 May 2013 09:31:20 GMT
Yuriy Sidelnikov created AMQ-4561:
-------------------------------------

             Summary: Deadlock in DemandForwardingBridgeSupport class if ConsumerInfo message
has arrived before BrokerInfo message.
                 Key: AMQ-4561
                 URL: https://issues.apache.org/jira/browse/AMQ-4561
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.7.0, 5.6.0
            Reporter: Yuriy Sidelnikov


To establish connection a spoke broker sends some special messages to the hub:
•	BrokerInfo
•	ConnectionInfo
•	SessionInfo
•	ProducerInfo
•	ConsumerInfo
In return hub sends exactly the same set of messages:
•	BrokerInfo
•	ConnectionInfo
•	SessionInfo
•	ProducerInfo
•	ConsumerInfo
 
All messages are sent asynchronously so message order is not guaranteed. 
 
However BrokerInfo message has to be delivered BEFORE ConsumerInfo message to the spoke broker
because:
1. ConsumerInfo processing logic is depended on some information provided in BrokerInfo message
so spoke broker side has lock on it.
2.  All incoming messages are processed in the same thread including reading from tcp/nio
stream.
Short excerpt from DemandForwardingBridgeSupport class:
private void startLocalBridge() throws Throwable {   BrokerInfo message processing
…..
    localStartedLatch.countDown();
            }
And ConsumerInfo message processing part has the lock:
case ConsumerInfo.DATA_STRUCTURE_TYPE:
                                localStartedLatch.await();
So if ConsumerInfo message has been received before BrokerInfo message the consuming thread
will be in dead lock: 
Name: ActiveMQ NIO Worker 13
State: WAITING on java.util.concurrent.CountDownLatch$Sync@150b06b
Total blocked: 1  Total waited: 3
Stack trace: 
 sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:811)
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:969)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1281)
java.util.concurrent.CountDownLatch.await(CountDownLatch.java:207)
org.apache.activemq.network.DemandForwardingBridgeSupport.serviceRemoteCommand(DemandForwardingBridgeSupport.java:534)


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message