Modify default queue type injection logic (backport #13837) #13854
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There were a few issues:
rabbitmqctl export definitions -
would export thedefault_queue_type
within vhost's metadata if set explicitly (correct) but also outside of themetadata
block even if not set explicitly for the vhost (not correct)rabbitmqadmin
would always export the default queue type in both placesmetadata
block is just redundantmetadata
block is inconsistent withrabbitmqctl export_definitions
(the difference stems from the fact that CTL only exports existing vhosts' metadata, while HTTP API injects the configuration-level DQT into each vhost'smetadata
upon export)This PR changes the DQT logic: no DQT is injected upon export because it's injected/inherited from the node's configuration into vhost's metadata when a vhost is declared. Therefore each vhost has its own DQT explicitly defined and it's always present in any export (both CTL and HTTP API).
The downsides of this approach is that export/import between systems with a different configuration-level DQT will now require adjusting the DQT in the JSON file
However the logic is should be easier now and more consistent with how queue-level DQT works: when a queue is declared without a type, the default queue type is injected. Going forward, DQT changes don't affect the queue. Similarly, now if a vhost with no DQT is declared, configuration-level DQT is injected and configuration changes don't affect existing vhosts.
This is an automatic backport of pull request #13837 done by Mergify.