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.


_______________________________________________
Mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack
Post to     : [email protected]
Unsubscribe : http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack

Reply via email to