On 07/04/16 21:07, Alan Conway wrote:
Currently proton-C and the various bindings do *not* auto-close
contained objects when the container closes. I.e. closing a connection
does not close its sessions, closing a session does not close its links
etc. Also closing a transport does not automatically close its
connection.
I believe there are some reconnect use-cases that require this, e.g. if
the transport closes unexpectedly you want to keep the connection and
its children around so you can use them to re-build connection state on
a new transport.
However in the majority of cases it is a huge pain. Look at the
existing broker.cpp example, `remove_stale_consumers`. The example
isn't even complete: you must implement transport_close,
connection_close, link_close (or in C++ sender_close and
receiver_close) AND session_close (forgotten in the broker.cpp example)
to clean up link resources correctly.
The way I think of this, it is not that contained objects are not
'auto-closed' so much as that there is no event that can be used to hook
in application specific cleanup that is required whether or not the
object was closed explicitly or implicitly (as a result of the object in
which it is contained being closed).
I'd like to find a way to automate this that doesn't break the
reconnect cases. Ideally I'd like it to be the default behavior unless
a reconnect handler is in play. Can that be done with the existing
event set or do we need new events?
I think it would be prudent to retain the ability to distinguish between
implicit and explicit 'close' if needed. It is also vital to distinguish
between (at a minimum) detach and close for links, since these have
different behaviour for many cases. (Ending a session detaches a link
rather than closing it).
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]