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

Keith Wall resolved QPID-3498.
------------------------------

    Resolution: Fixed

Committed change so that sender thread is always started before receiver 
thread, so this problem can no longer occur. 

Also added a defensive check to IoSender#send to make diagnosis more obvious 
should this problem ever regress.

> Broker race condition means that it tries to respond before IoSender thread 
> is running
> --------------------------------------------------------------------------------------
>
>                 Key: QPID-3498
>                 URL: https://issues.apache.org/jira/browse/QPID-3498
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>            Reporter: Keith Wall
>            Assignee: Keith Wall
>             Fix For: 0.13
>
>
> Since the removal of Mina from the transport layer, we've been seeing 
> sporadic failures from the java-mms-spawn.0-9-1 profile on an old slow CI 
> server.
> Tests are failing with the following exception whilst the client is 
> attempting to negotiate downwards from 0-10 to 0-9-1 protocol during 
> connection:
> {code}
> main 2011-09-21 14:27:09,139 INFO [apache.qpid.client.AMQConnection] Unable 
> to connect to broker at tcp://localhost:15672
> org.apache.qpid.AMQException: Cannot connect to broker: connect() aborted 
> [error code 200: reply success]
>         at 
> org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:218)
>         at 
> org.apache.qpid.client.AMQConnection.makeBrokerConnection(AMQConnection.java:565)
>         at org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:351)
>         at 
> org.apache.qpid.client.AMQConnectionFactory.createConnection(AMQConnectionFactory.java:132)
>         at 
> org.apache.qpid.client.AMQConnectionFactory.createConnection(AMQConnectionFactory.java:111)
>         at 
> org.apache.qpid.test.utils.QpidBrokerTestCase.getConnection(QpidBrokerTestCase.java:1056)
>         at 
> org.apache.qpid.test.unit.basic.LargeMessageTest.setUp(LargeMessageTest.java:52)
>         at junit.framework.TestCase.runBare(TestCase.java:125)
>         at 
> org.apache.qpid.test.utils.QpidBrokerTestCase.runBare(QpidBrokerTestCase.java:238)
>         at junit.framework.TestResult$1.protect(TestResult.java:106)
>         at junit.framework.TestResult.runProtected(TestResult.java:124)
> {code}
> Analysis has shown that when the problem occurs, the broker tries to write 
> the highest supported protocol version number to the wire, but these bytes 
> never make it to the wire (see MultiVersionProtocolEngine#received() lines 
> 409-414).   The reason for this is a race condition: there is an unlucky 
> timing where the broker may begin responding to incoming frames *before* it 
> has started the IoSender thread. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

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

Reply via email to