[Openstack] [Nova] nova.service.Service.kill() tears down compute_topic on qpid
boden
boden at linux.vnet.ibm.com
Sun Nov 3 11:44:55 UTC 2013
This issue is specific to the nova.service and amqp components of
OpenStack. More specifically it appears to only relate to qpid brokers.
We have a custom implementation which creates a few nova.service.Service
objects using nova.service.Service.create() and manages their lifecycle.
All of these services use the CONF.compute_topic as their amqp topic (by
default ends up as 'nova/compute').
Life is grand when all services are running.
During our service lifecycle, there are times when we need to kill one
or more of our services. To do so we use the nova.service.Service.kill()
method for the respective service we want to destroy.
kill() works indeed, however as part of that call stack
nova.openstack.common.rpc.amqp.ConnectionContext._done() is invoked --
this tears down the amqp broker connection (i.e.
self.connection.close()). Herein lies my problem -- this close() on the
amqp connection when using qpid amqp tears down the 'compute' exchange
topic queue, even when other connection sessions are open to it.
The result is that any remaining services still using the 'compute'
topic are hosed -- the exchange queue is gone.
I'm not an amqp/qpid expert but I had thought that non-exclusive queues
they would not be deleted until the last session was closed. This does
not appear to be the case.
This happens with qpid 0.22... Does not appear to happen on Rabbit.
Any amqp experts have a lead on this behavior?
I've sent a note to the qpid list here:
http://qpid.2158936.n2.nabble.com/qpid-c-broker-deletes-non-exclusive-queue-when-sessions-are-open-td7600239.html
Any tips would be appreciated.
More information about the Openstack
mailing list