Clifford Jansen created PROTON-2897:
---------------------------------------
Summary: Proton graceful AMQP protocol connection close vs
immediate socket close
Key: PROTON-2897
URL: https://issues.apache.org/jira/browse/PROTON-2897
Project: Qpid Proton
Issue Type: Improvement
Components: proton-c
Affects Versions: proton-c-0.40.0
Reporter: Clifford Jansen
Assignee: Clifford Jansen
Attachments: hbhang.c
On a protocol error at the AMQP connection level (such as idle timeout
exceeded), the Proton core engine shuts down its virtual input but leaves the
output open to make a best efforts processing of pending frames to send to the
peer. This includes the connection close frame and associated error condition.
In the normal case, these frames are written into the OS socket and become the
responsibility of the OS to handle problems that may arise on the wire. After
Proton has sent the last frame, the transport is closed in both directions and
the socket can be closed and the PN_TRANSPORT_CLOSED is emitted.
In the less normal (but not abnormal) case, the output to peer may be backed up
such that the OS refuses to accept new outgoing protocol frames. In this case,
Proton waits for the OS to eventually accept the pending output or tell Proton
the socket is dead. It may surprise the application using Proton that this may
take many minutes depending on the underlying platform and how it is configured.
This "surprising" behavior could be addressed by several means. Better
documentation. Acceptance that the OS decision of when to give up on a socket
is appropriate. Introduce a new connection parameter that sets a maximum
error-to-transport-closed time.
An example of better documentation would be highlighting how the application
could use pn_transport_close_head() to force discarding pending output and
cleanup of the connection resources, immediately or at a timed delay. This is
demonstrated in the attached sample program.
Sadly, at the moment pn_transport_close_head() is a deprecated API, and there
is no alternative functionality yet surfaced for use by the application. The
connection_driver for a particular connection cannot be queried from the Proton
core or Proactor APIs.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]