On 11/03/2013 10:06 PM, boden wrote:
On 11/3/2013 5:02 AM, boden wrote:
Sorry for resend; my previous email got marked as a response to a
different thread...


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]




It appears this might be my issue:
https://issues.apache.org/jira/browse/QPID-4903?jql=project%20in%20(QPID%2C%20PROTON)%20and%20text%20~%20'delete'%20order%20by%20updatedDate%20desc


if I'm reading properly, it looks like a small patch.. I will
investigate manually patching the diff on qpid 0.22 python client

Yes, that does look to be the issue. One other point is that at present qpidd does not support the autodelete property on exchanges, so the autodelete in the node properties is essentially ignored in your example.

(I'm going to look into implementing something there shortly).


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

Reply via email to