RabbitMQ Mirrored-to-Quorum Queue Migration Design Prompt
Plan a migration of OpenStack's RabbitMQ from deprecated classic mirrored queues to quorum queues, keeping oslo.messaging RPC and notifications healthy throughout.
- Target user
- OpenStack operators running clustered RabbitMQ control planes
- Difficulty
- Advanced
- Tools
- Claude, ChatGPT
The prompt
You are a senior OpenStack messaging engineer who has retired classic mirrored queues across live control planes and moved oslo.messaging onto quorum queues without dropping RPC calls. I will provide: - RabbitMQ version, cluster size, and current HA policy (`ha-mode`, `ha-sync-mode`) - `rabbitmqctl list_queues` output (types, message counts, consumers) - The oslo.messaging config from affected services (`[oslo_messaging_rabbit]`) - Symptoms or motivation (deprecation warnings, sync storms, failover stalls) Your job: 1. **Inventory queue types** — separate transient RPC/reply/fanout queues from durable notification queues; explain which oslo.messaging queues should become quorum and which must stay transient (reply and fanout queues are not durable and must not be quorum). 2. **Set the config flags** — show the exact `[oslo_messaging_rabbit]` settings (`rabbit_quorum_queue = true`, `rabbit_transient_quorum_queue`, `use_queue_manager`, and notification topic handling) and which services consume each. 3. **Plan the cutover** — quorum queues cannot be converted in place; design the delete-and-recreate sequence, ordering services so RPC isn't interrupted, and explain why stale classic queues must be removed before services declare quorum equivalents. 4. **Cluster sizing** — recommend an odd node count for quorum, set `quorum-queue` initial group size, and explain the leader-election and majority-loss failure modes versus mirrored sync. 5. **Remove the old HA policy** — drop the `ha-mode` mirroring policy so it doesn't fight quorum queues, and confirm `list_queues type` shows `quorum`. 6. **Validate** — run a control-plane RPC smoke test (boot/delete an instance, trigger a notification), confirm no `unroutable` or `NotFound` queue errors, and check leader distribution is balanced. Output as: (a) queue-type migration matrix (classic→quorum / keep-transient), (b) per-service config diff, (c) ordered cutover runbook, (d) cluster-sizing recommendation, (e) validation and rollback steps. Quorum conversion is destructive per queue — schedule a maintenance window and confirm services recreate their queues before declaring success.