From 1a9074c59084e122d5c0bb6416ee91c8b286a6d3 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Mon, 25 Aug 2025 13:23:20 +0200 Subject: [PATCH] Ensure no CQ mirroring policies applied During migration to Quorum queues we have renamed vhosts to not contain leading slash for them. However, some services at the same time were configured not to have RPC messaging, but only notifications whenever needed - like keystone, glance, etc. This left such vhosts still containing HA policy on them, leading to RabbitMQ upgrade failures with: ``` rabbitmq-server[2934794]: Application rabbit exited with reason: {{failed_to_deny_deprecated_features,[classic_queue_mirroring]},{rabbit,start,[normal,[]]}} ``` This patch implements a check of deprecated feature flags and disables all HA policies across the board before upgrade happens. As we don't want to force removal when running RabbitMQ 3.13, the removal is enforced only during upgrade to 4.0. Conditions are maintained on a task level rather then a block to make it extendable with other deprecated flags in the future. Change-Id: I372421e0347687a1d861b548fd20ee92b150c301 Signed-off-by: Dmitriy Rabotyagov --- ...e_no_queue_mirroring-c032f6e169f09c2d.yaml | 7 ++++++ tasks/rabbitmq_feature_flags.yml | 24 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 releasenotes/notes/rabbitmq_ensure_no_queue_mirroring-c032f6e169f09c2d.yaml diff --git a/releasenotes/notes/rabbitmq_ensure_no_queue_mirroring-c032f6e169f09c2d.yaml b/releasenotes/notes/rabbitmq_ensure_no_queue_mirroring-c032f6e169f09c2d.yaml new file mode 100644 index 00000000..ca9f0db4 --- /dev/null +++ b/releasenotes/notes/rabbitmq_ensure_no_queue_mirroring-c032f6e169f09c2d.yaml @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fixed RabbitMQ upgrade issue for older deployments which had + previously used RabbitMQ Classic Queue mirroring (HA Queues) + by implementing an upgrade check and disabling leftover + policies on upgrade. diff --git a/tasks/rabbitmq_feature_flags.yml b/tasks/rabbitmq_feature_flags.yml index ee59ba7e..10198dea 100644 --- a/tasks/rabbitmq_feature_flags.yml +++ b/tasks/rabbitmq_feature_flags.yml @@ -27,3 +27,27 @@ loop: "{{ _feature_flags.stdout | from_json | rejectattr('stability', 'eq', 'experimental') | selectattr('state', 'eq', 'disabled') }}" loop_control: loop_var: flag + +- name: Check for deprecated features + when: + - rabbitmq_upgrade | bool + tags: + - rabbitmq-upgrade + block: + - name: Check for deprecated features + ansible.builtin.command: rabbitmq-diagnostics check_if_any_deprecated_features_are_used --formatter json + changed_when: false + failed_when: false + register: deprecated_features + + - name: Disable classic queues if still used + vars: + parsed_deprecations: "{{ ((deprecated_features.rc == 0) | ternary(deprecated_features.stdout, deprecated_features.stderr)) | from_json }}" + ansible.builtin.command: rabbitmqctl remove_classic_queue_mirroring_from_policies + changed_when: true + when: + - rabbitmq_package_version is version('4.0', '>=') + - installed_rabbitmq.rc == 0 + - installed_rabbitmq.stdout is version('4.0', '<') + - parsed_deprecations.result == 'error' + - "'classic_queue_mirroring' in parsed_deprecations.deprecated_features"