ironic-neutron-agent doesn't support quorum queues

Bug #2046962 reported by Sam Schmitt
12
This bug affects 2 people
Affects Status Importance Assigned to Milestone
networking-baremetal
In Progress
Medium
Sven Kieske

Bug Description

RabbitMQ Quorum Queues are a replacement for the classic queue mirroring for HA. Classic queue mirroring is scheduled to be removed in RabbitMQ 4.0[0]. Quorum Queues can be enabled in [oslo_messaging_rabbit] with `rabbit_quorum_queue = true`. However, running RabbitMQ with quorum queues and ironic-neutron-agent results in the following error:

```amqp.exceptions.PreconditionFailed: Queue.declare: (406) PRECONDITION_FAILED - invalid property 'auto-delete' for queue 'ironic-neutron-agent-member-manager.info' in vhost '/'```

It seems the auto-delete property isn't valid for quorum queues, and ironic-neutron-agent forces this option on no matter what option is configured[1].

Tested on a brand new Bobcat based deployment with Kolla-Ansible 17.0.0

[0]: https://blog.rabbitmq.com/posts/2021/08/4.0-deprecation-announcements/
[1]:https://opendev.org/openstack/networking-baremetal/src/commit/8f3fcc073f415913b5db3b6fee51788578578e16/networking_baremetal/agent/ironic_neutron_agent.py#L55

Revision history for this message
Sam Schmitt (samcat116) wrote :

In Kolla-ansible, the workaround for this is using:

om_enable_rabbitmq_high_availability: true
om_enable_rabbitmq_quorum_queues: false

Revision history for this message
Michal Nasiadka (mnasiadka) wrote :

Looking at the code (https://opendev.org/openstack/networking-baremetal/src/commit/8f3fcc073f415913b5db3b6fee51788578578e16/networking_baremetal/agent/ironic_neutron_agent.py#L51) - it seems that as a workaround - setting amqp_auto_delete to False under [oslo_messaging_rabbit] should do the trick:

def _get_notification_transport_url():
    url = urlparse.urlparse(CONF.transport_url)
    if CONF.oslo_messaging_rabbit.amqp_auto_delete is False:
        q = urlparse.parse_qs(url.query)
        q.update({'amqp_auto_delete': ['true']})
        query = urlparse.urlencode({k: v[0] for k, v in q.items()})
        url = url._replace(query=query)
    return urlparse.urlunparse(url)

Revision history for this message
Sven Kieske (s-kieske) wrote :
Revision history for this message
Iury Gregory Melo Ferreira (iurygregory) wrote :

Updating the bug since Sven has a patch up for it.

Changed in networking-baremetal:
assignee: nobody → Sven Kieske (s-kieske)
status: New → In Progress
importance: Undecided → Medium
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/networking-baremetal 6.3.0

This issue was fixed in the openstack/networking-baremetal 6.3.0 release.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/networking-baremetal 6.1.1

This issue was fixed in the openstack/networking-baremetal 6.1.1 release.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.