I'm running into an issue with the qpid C++ broker (version 0.22) related to a non-exclusive exchange queue getting deleted when sessions are still active.

Scenario:
- Open 2 connections/sessions to a single non-exclusive exchange. The node is set to auto-delete, and link is not.
- Close connection 1.
- The close of connection 1 deletes the exchange queue, even though a connection/session is still open to it (connection 2).

It was my understanding that the exchange queue would not get deleted until the last session/connection disconnected, but it appears it gets deleted on the 1st disconnect.

Is this proper behavior?

Sample program to repo:


from qpid.messaging import *
import time

conn = Connection("qpidclient/mypasswd@localhost:5672")
conn2 = Connection("qpidclient/mypasswd@localhost:5672")

try:
    conn.open()
    conn2.open()

    session = conn.session()
    session2 = conn2.session()
rev = session.receiver('nova/test ; {"node": {"x-declare": {"auto-delete": true, "durable": true}, "type": "topic"}, "create": "always", "link": {"x-declare": {"auto-delete": false, "exclusive": false, "durable": false}, "durable": true, "name": "test"}}')


rev2 = session2.receiver('nova/test ; {"node": {"x-declare": {"auto-delete": true, "durable": true}, "type": "topic"}, "create": "always", "link": {"x-declare": {"auto-delete": false, "exclusive": false, "durable": false}, "durable": true, "name": "test"}}')
    print("sleeping...")
    time.sleep(20)
    print("closing conn 1")
    conn.close()
    time.sleep(30)
except MessagingError,m:
    print str(m)

print("closing conn2")
conn2.close()



If you run the above on the version 0.22 c++ broker you'll get:


sleeping...
closing conn 1
closing conn2
Traceback (most recent call last):
  File "./qpidc.py", line 26, in <module>
    conn2.close()
  File "<string>", line 6, in close
File "/usr/lib/python2.6/site-packages/qpid/messaging/endpoints.py", line 321, in close
    ssn.close(timeout=timeout)
  File "<string>", line 6, in close
File "/usr/lib/python2.6/site-packages/qpid/messaging/endpoints.py", line 747, in close
    link.close(timeout=timeout)
  File "<string>", line 6, in close
File "/usr/lib/python2.6/site-packages/qpid/messaging/endpoints.py", line 1055, in close
    if not self.session._ewait(lambda: self.closed, timeout=timeout):
File "/usr/lib/python2.6/site-packages/qpid/messaging/endpoints.py", line 572, in _ewait
    self.check_error()
File "/usr/lib/python2.6/site-packages/qpid/messaging/endpoints.py", line 561, in check_error
    raise self.error
qpid.messaging.exceptions.NotFound: not-found: Delete failed. No such queue: test (/opt/build/jenkins/workspace/rpmbuild-qpid-cpp-0.22-x86_64/rpmbuild/BUILD/qpid-0.22/cpp/src/qpid/broker/Broker.cpp:1184)(404)



Any feedback is appreciated.



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to