Qpid
  1. Qpid
  2. QPID-3943

subscription queues for links with no explicit name not marked auto-delete

    Details

    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 0.17
    • Component/s: Python Client
    • Labels:
      None

      Description

      On creating a receiver from an exchange, the subscription queue created is marked exclusive, but not auto-delete. This means if the connection is lost without proper cleanup, the queue will remain on the server. Since the queue name is by default a library generated UUID, there is no way for the application to resubscribe to that queue. In other words it really should be marked auto-delete. This would also then match the c++ client and provide a more uniform experience across languages.

        Activity

        Hide
        Gordon Sim added a comment -

        Suggested fix:

        Index: qpid/messaging/driver.py
        ===================================================================
        --- qpid/messaging/driver.py	(revision 1311665)
        +++ qpid/messaging/driver.py	(working copy)
        @@ -226,7 +226,11 @@
         
           def do_link(self, sst, rcv, _rcv, type, subtype, action):
             link_opts = _rcv.options.get("link", {})
        -    reliability = link_opts.get("reliability", "at-least-once")
        +    if type == "topic":
        +      default_reliability = "unreliable"
        +    else:
        +      default_reliability = "at-least-once"
        +    reliability = link_opts.get("reliability", default_reliability)
             declare = link_opts.get("x-declare", {})
             subscribe = link_opts.get("x-subscribe", {})
             acq_mode = acquire_mode.pre_acquired
        
        Show
        Gordon Sim added a comment - Suggested fix: Index: qpid/messaging/driver.py =================================================================== --- qpid/messaging/driver.py (revision 1311665) +++ qpid/messaging/driver.py (working copy) @@ -226,7 +226,11 @@ def do_link(self, sst, rcv, _rcv, type, subtype, action): link_opts = _rcv.options.get("link", {}) - reliability = link_opts.get("reliability", "at-least-once") + if type == "topic": + default_reliability = "unreliable" + else: + default_reliability = "at-least-once" + reliability = link_opts.get("reliability", default_reliability) declare = link_opts.get("x-declare", {}) subscribe = link_opts.get("x-subscribe", {}) acq_mode = acquire_mode.pre_acquired

          People

          • Assignee:
            Gordon Sim
            Reporter:
            Gordon Sim
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development