[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