-
Bug
-
Resolution: Done
-
Major
-
None
-
None
-
None
If an AMQP 1.0 peer attaches a link that will expire on link-detach, and then later detaches the link with a closed=false, as it makes no sense for the link ever to be attached again, the Broker ought to treat this as if closed=true and free any resources associated with the link and respond with a detach closed=true. This currently does not happen.
This defect was exposed when testing EnMasse (with a standard address space). The application (using the Qpid JMS Client) had created non-durable topic subscriptions and was then disconnected ungracefully. The queues backing the subscription were seen to leak on the Broker.
The protocol trace between Qpid Dispatch and the Broker follows (-> = Dispatch to Broker):
[0x7f6acc051b10]:4 -> @attach(18) [name="qpid-jms:receiver:ID:ac75e7c3-e850-4a23-bb4f-4220dffa1dac:1:1:1:footopic2", handle=0, role=true, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) [address="footopic2", durable=0, expiry-policy=:"link-detach", timeout=0, dynamic=false, outcomes=@PN_SYMBOL[:"amqp:accepted:list", :"amqp:rejected:list", :"amqp:released:list", :"amqp:modified:list"], capabilities=@PN_SYMBOL[:topic]], target=@target(41) [durable=0, timeout=0, dynamic=false], initial-delivery-count=0, max-message-size=0] [0x7f6acc051b10]:4 <- @attach(18) [name="qpid-jms:receiver:ID:ac75e7c3-e850-4a23-bb4f-4220dffa1dac:1:1:1:footopic2", handle=0, role=false, snd-settle-mode=2, rcv-settle-mode=0, source=@source(40) [address="footopic2", durable=0, expiry-policy=:"link-detach", timeout=0, dynamic=false, outcomes=@PN_SYMBOL[:"amqp:accepted:list", :"amqp:rejected:list", :"amqp:released:list", :"amqp:modified:list"], capabilities=@PN_SYMBOL[:topic]], target=@target(41) [durable=0, timeout=0, dynamic=false], initial-delivery-count=0, max-message-size=0] [0x7f6acc051b10]:4 -> @detach(22) [handle=0, closed=false, error=@error(29) [condition=:"qd:routed-link-lost", description="Connectivity to the peer container was lost"]] [0x7f6acc051b10]:4 <- @detach(22) [handle=0, closed=false]