[
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]