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

Robbie Gemmell resolved QPID-3534.
----------------------------------

    Resolution: Fixed

Applied.
                
> 0-9-1 client attempts to reuse the connection after sending ConnectionCloseOk
> -----------------------------------------------------------------------------
>
>                 Key: QPID-3534
>                 URL: https://issues.apache.org/jira/browse/QPID-3534
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.5, 0.6, 0.7, 0.8, 0.9, 0.10, 0.11, 0.12
>            Reporter: Alex Rudyy
>            Assignee: Robbie Gemmell
>             Fix For: 0.13
>
>         Attachments: 
> 0001-QPID-3534-QPID-3535-make-0-8-0-9-0-9-1-client-path-s.patch, 
> 0002-QPID-3534-ignore-transport-exceptions-raised-whilst-.patch
>
>
> With current implementation of 0-8/0-9/0-9-1 client, on receiving 
> ConnectionClose command from a broker, the client sends ConnectionCloseOk to 
> the server, and, than it sends another ConnectionClose commands to the broker.
> First of all, such client behavior is not in the line with AMQP specs.
> The sending of second command "ConnectionClose" from a client in the process 
> of closing socket by a broker might result in Exceptions being thrown in 
> IoSender which in turn might close the client connection and cause unexpected 
> behaviour in failover( The failover thread cannot be started when connection 
> is closed).
> The following logs demonstrates the issue
> {noformat}
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,948 INFO 
> [qpid.protocol] RECV: 
> [org.apache.qpid.client.protocol.AMQProtocolHandler@19d142f] Frame channelId: 
> 0, bodyFrame: [ConnectionCloseBodyImpl: replyCode=320, replyText=Broker is 
> shutting down, classId=0, methodId=0]
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,948 DEBUG 
> [qpid.client.protocol.AMQProtocolHandler] (27071535)Method frame received: 
> [ConnectionCloseBodyImpl: replyCode=320, replyText=Broker is shutting down, 
> classId=0, methodId=0]
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,948 INFO 
> [qpid.client.handler.ConnectionCloseMethodHandler] ConnectionClose frame 
> received
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,949 DEBUG 
> [qpid.protocol] SEND: 
> [org.apache.qpid.client.protocol.AMQProtocolHandler@19d142f] Frame channelId: 
> 0, bodyFrame: [ConnectionCloseOkBodyImpl: ]
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,949 INFO 
> [qpid.client.handler.ConnectionCloseMethodHandler] Connection close received 
> with error code 320: connection forced
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,949 DEBUG 
> [qpid.client.state.AMQStateManager] State changing to AMQState: id = 5 name: 
> CONNECTION_CLOSING from old state AMQState: id = 4 name: CONNECTION_OPEN
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,949 DEBUG 
> [qpid.client.state.AMQStateManager] Notififying State change to 0 : []
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,949 ERROR 
> [qpid.client.state.AMQStateManager] No Waiters for error saving as last 
> error:Error: Broker is shutting down
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,949 INFO 
> [qpid.client.protocol.AMQProtocolHandler] Exception caught therefore going to 
> attempt failover: org.apache.qpid.AMQConnectionClosedException: Error: Broker 
> is shutting down [error code 320: connection forced]
> org.apache.qpid.AMQConnectionClosedException: Error: Broker is shutting down 
> [error code 320: connection forced]
>       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
>       at 
> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
>       at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>       at 
> org.apache.qpid.AMQException.cloneForCurrentThread(AMQException.java:116)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.writeCommandFrameAndWaitForReply(AMQProtocolHandler.java:617)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.syncWrite(AMQProtocolHandler.java:653)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.closeConnection(AMQProtocolHandler.java:683)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolSession.closeProtocolSession(AMQProtocolSession.java:365)
>       at 
> org.apache.qpid.client.handler.ConnectionCloseMethodHandler.methodReceived(ConnectionCloseMethodHandler.java:105)
>       at 
> org.apache.qpid.client.handler.ClientMethodDispatcherImpl.dispatchConnectionClose(ClientMethodDispatcherImpl.java:192)
>       at 
> org.apache.qpid.framing.amqp_0_91.ConnectionCloseBodyImpl.execute(ConnectionCloseBodyImpl.java:142)
>       at 
> org.apache.qpid.client.state.AMQStateManager.methodReceived(AMQStateManager.java:114)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.methodBodyReceived(AMQProtocolHandler.java:480)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolSession.methodFrameReceived(AMQProtocolSession.java:445)
>       at 
> org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:96)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.received(AMQProtocolHandler.java:437)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.received(AMQProtocolHandler.java:121)
>       at 
> org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:151)
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: org.apache.qpid.AMQConnectionClosedException: Error: Broker is 
> shutting down [error code 320: connection forced]
>       at 
> org.apache.qpid.client.handler.ConnectionCloseMethodHandler.methodReceived(ConnectionCloseMethodHandler.java:92)
>       ... 10 more
> IoSender - localhost/127.0.0.1:25672 2011-10-08 08:39:49,950 ERROR 
> [transport.network.io.IoSender] error in write thread
> java.net.SocketException: Broken pipe
>       at java.net.SocketOutputStream.socketWrite0(Native Method)
>       at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>       at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>       at org.apache.qpid.transport.network.io.IoSender.run(IoSender.java:313)
>       at java.lang.Thread.run(Thread.java:619)
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,951 ERROR 
> [qpid.client.protocol.AMQProtocolHandler] Exception processing frame
> org.apache.qpid.transport.SenderException: java.net.SocketException: Broken 
> pipe
>       at 
> org.apache.qpid.transport.network.io.IoSender.close(IoSender.java:234)
>       at 
> org.apache.qpid.transport.network.io.IoSender.close(IoSender.java:194)
>       at 
> org.apache.qpid.transport.network.io.IoNetworkConnection.close(IoNetworkConnection.java:70)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.exception(AMQProtocolHandler.java:307)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.methodBodyReceived(AMQProtocolHandler.java:505)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolSession.methodFrameReceived(AMQProtocolSession.java:445)
>       at 
> org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:96)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.received(AMQProtocolHandler.java:437)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.received(AMQProtocolHandler.java:121)
>       at 
> org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:151)
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: java.net.SocketException: Broken pipe
>       at java.net.SocketOutputStream.socketWrite0(Native Method)
>       at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>       at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>       at org.apache.qpid.transport.network.io.IoSender.run(IoSender.java:313)
>       ... 1 more
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,951 DEBUG 
> [apache.qpid.client.AMQConnection] exceptionReceived done by:IoReceiver - 
> localhost/127.0.0.1:25672
> org.apache.qpid.transport.SenderException: java.net.SocketException: Broken 
> pipe
>       at 
> org.apache.qpid.transport.network.io.IoSender.close(IoSender.java:234)
>       at 
> org.apache.qpid.transport.network.io.IoSender.close(IoSender.java:194)
>       at 
> org.apache.qpid.transport.network.io.IoNetworkConnection.close(IoNetworkConnection.java:70)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.exception(AMQProtocolHandler.java:307)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.methodBodyReceived(AMQProtocolHandler.java:505)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolSession.methodFrameReceived(AMQProtocolSession.java:445)
>       at 
> org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:96)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.received(AMQProtocolHandler.java:437)
>       at 
> org.apache.qpid.client.protocol.AMQProtocolHandler.received(AMQProtocolHandler.java:121)
>       at 
> org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:151)
>       at java.lang.Thread.run(Thread.java:619)
> Caused by: java.net.SocketException: Broken pipe
>       at java.net.SocketOutputStream.socketWrite0(Native Method)
>       at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>       at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>       at org.apache.qpid.transport.network.io.IoSender.run(IoSender.java:313)
>       ... 1 more
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,951 INFO 
> [apache.qpid.client.AMQConnection] Closing AMQConnection due to 
> :org.apache.qpid.transport.SenderException: java.net.SocketException: Broken 
> pipe
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,952 DEBUG 
> [apache.qpid.client.BasicMessageConsumer] Passed exception to synchronous 
> queue for propagation to receive()
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,952 DEBUG 
> [qpid.client.protocol.AMQProtocolHandler] Session closed called by client
> IoReceiver - localhost/127.0.0.1:25672 2011-10-08 08:39:49,952 DEBUG 
> [qpid.client.protocol.AMQProtocolHandler] Protocol Session 
> [org.apache.qpid.client.protocol.AMQProtocolHandler@19d142f] closed
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
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