I am from Microsoft Azure EventHubs team & our javaclient depends on proton-j for Amqp.
We use Reactor API’s to implement the client and also have built a connection Retry mechanism on top of this – which is running great! Recently, we ran into a Memory leak of byte’s which are held by Reactor (actually, zombie instances of ConnectionImpl aka TransportImpl) and am trying to understand who owns cleaning up TransportImpl objects (unbind from Connection and free its resources) while using Reactor APIs - in these 3 scenarios after the Connection is already bound to Transport:
1. When the remote peer sends detach frame on the connection – with error (for ex: “connection-force-detached”), reactor invokes onConnectionRemoteClose() handler.
2. When the local peer want to send the Close frame <-- in this scenario – reactor/proton performs cleanup and removes the ConnectionImpl object from the Reactor Children set.
3. On temporary n/w loss scenario (we see onTransportError event), reactor invokes the onTransportError handler.