RabbitMQ: Add support for quorum queue options

Change-Id: Ic95ebf1128152bac120b3a3f3732c8bc5891c27b
This commit is contained in:
Takashi Kajinami
2023-09-13 15:46:58 +09:00
parent 6b1b5cb91c
commit b400662729
3 changed files with 92 additions and 46 deletions

View File

@@ -113,6 +113,24 @@
# will be run through a green thread.
# Defaults to $facts['os_service_default']
#
# [*rabbit_quorum_queue*]
# (Optional) Use quorum queues in RabbitMQ.
# Defaults to $facts['os_service_default']
#
# [*rabbit_quorum_delivery_limit*]
# (Optional) Each time a message is rdelivered to a consumer, a counter is
# incremented. Once the redelivery count exceeds the delivery limit
# the message gets dropped or dead-lettered.
# Defaults to $facts['os_service_default']
#
# [*rabbit_quorum_max_memory_length*]
# (Optional) Limit the number of messages in the quorum queue.
# Defaults to $facts['os_service_default']
#
# [*rabbit_quorum_max_memory_bytes*]
# (Optional) Limit the number of memory bytes used by the quorum queue.
# Defaults to $facts['os_service_default']
#
define oslo::messaging::rabbit(
$amqp_durable_queues = $facts['os_service_default'],
$kombu_ssl_version = $facts['os_service_default'],
@@ -134,6 +152,10 @@ define oslo::messaging::rabbit(
$heartbeat_timeout_threshold = $facts['os_service_default'],
$heartbeat_rate = $facts['os_service_default'],
$heartbeat_in_pthread = $facts['os_service_default'],
$rabbit_quorum_queue = $facts['os_service_default'],
$rabbit_quorum_delivery_limit = $facts['os_service_default'],
$rabbit_quorum_max_memory_length = $facts['os_service_default'],
$rabbit_quorum_max_memory_bytes = $facts['os_service_default'],
){
$kombu_ssl_ca_certs_set = (!is_service_default($kombu_ssl_ca_certs) and ($kombu_ssl_ca_certs))
@@ -164,27 +186,32 @@ define oslo::messaging::rabbit(
fail('Unsupported Kombu compression. Possible values are gzip and bz2')
}
$rabbit_options = { 'oslo_messaging_rabbit/amqp_durable_queues' => { value => $amqp_durable_queues },
'oslo_messaging_rabbit/heartbeat_rate' => { value => $heartbeat_rate },
'oslo_messaging_rabbit/heartbeat_in_pthread' => { value => $heartbeat_in_pthread },
'oslo_messaging_rabbit/heartbeat_timeout_threshold' => { value => $heartbeat_timeout_threshold },
'oslo_messaging_rabbit/kombu_compression' => { value => $kombu_compression },
'oslo_messaging_rabbit/kombu_failover_strategy' => { value => $kombu_failover_strategy },
'oslo_messaging_rabbit/kombu_missing_consumer_retry_timeout' => { value => $kombu_missing_consumer_retry_timeout },
'oslo_messaging_rabbit/kombu_reconnect_delay' => { value => $kombu_reconnect_delay },
'oslo_messaging_rabbit/rabbit_interval_max' => { value => $rabbit_interval_max },
'oslo_messaging_rabbit/rabbit_login_method' => { value => $rabbit_login_method },
'oslo_messaging_rabbit/rabbit_retry_backoff' => { value => $rabbit_retry_backoff },
'oslo_messaging_rabbit/rabbit_retry_interval' => { value => $rabbit_retry_interval },
'oslo_messaging_rabbit/rabbit_transient_queues_ttl' => { value => $rabbit_transient_queues_ttl },
'oslo_messaging_rabbit/ssl' => { value => $rabbit_use_ssl },
'oslo_messaging_rabbit/rabbit_qos_prefetch_count' => { value => $rabbit_qos_prefetch_count },
'oslo_messaging_rabbit/rabbit_ha_queues' => { value => $rabbit_ha_queues },
'oslo_messaging_rabbit/ssl_ca_file' => { value => $kombu_ssl_ca_certs },
'oslo_messaging_rabbit/ssl_cert_file' => { value => $kombu_ssl_certfile },
'oslo_messaging_rabbit/ssl_key_file' => { value => $kombu_ssl_keyfile },
'oslo_messaging_rabbit/ssl_version' => { value => $kombu_ssl_version },
}
$rabbit_options = {
'oslo_messaging_rabbit/amqp_durable_queues' => { value => $amqp_durable_queues },
'oslo_messaging_rabbit/heartbeat_rate' => { value => $heartbeat_rate },
'oslo_messaging_rabbit/heartbeat_in_pthread' => { value => $heartbeat_in_pthread },
'oslo_messaging_rabbit/heartbeat_timeout_threshold' => { value => $heartbeat_timeout_threshold },
'oslo_messaging_rabbit/kombu_compression' => { value => $kombu_compression },
'oslo_messaging_rabbit/kombu_failover_strategy' => { value => $kombu_failover_strategy },
'oslo_messaging_rabbit/kombu_missing_consumer_retry_timeout' => { value => $kombu_missing_consumer_retry_timeout },
'oslo_messaging_rabbit/kombu_reconnect_delay' => { value => $kombu_reconnect_delay },
'oslo_messaging_rabbit/rabbit_interval_max' => { value => $rabbit_interval_max },
'oslo_messaging_rabbit/rabbit_login_method' => { value => $rabbit_login_method },
'oslo_messaging_rabbit/rabbit_retry_backoff' => { value => $rabbit_retry_backoff },
'oslo_messaging_rabbit/rabbit_retry_interval' => { value => $rabbit_retry_interval },
'oslo_messaging_rabbit/rabbit_transient_queues_ttl' => { value => $rabbit_transient_queues_ttl },
'oslo_messaging_rabbit/ssl' => { value => $rabbit_use_ssl },
'oslo_messaging_rabbit/rabbit_qos_prefetch_count' => { value => $rabbit_qos_prefetch_count },
'oslo_messaging_rabbit/rabbit_ha_queues' => { value => $rabbit_ha_queues },
'oslo_messaging_rabbit/rabbit_quorum_queue' => { value => $rabbit_quorum_queue },
'oslo_messaging_rabbit/rabbit_quorum_delivery_limit' => { value => $rabbit_quorum_delivery_limit },
'oslo_messaging_rabbit/rabbit_quorum_max_memory_length' => { value => $rabbit_quorum_max_memory_length },
'oslo_messaging_rabbit/rabbit_quorum_max_memory_bytes' => { value => $rabbit_quorum_max_memory_bytes },
'oslo_messaging_rabbit/ssl_ca_file' => { value => $kombu_ssl_ca_certs },
'oslo_messaging_rabbit/ssl_cert_file' => { value => $kombu_ssl_certfile },
'oslo_messaging_rabbit/ssl_key_file' => { value => $kombu_ssl_keyfile },
'oslo_messaging_rabbit/ssl_version' => { value => $kombu_ssl_version },
}
create_resources($name, $rabbit_options)
}

View File

@@ -0,0 +1,5 @@
---
features:
- |
The ``oslo::messaging::rabbit`` defined resource type now supports options
for quorum queues in RabbitMQ.

View File

@@ -8,42 +8,56 @@ describe 'oslo::messaging::rabbit' do
context 'with default parameters' do
it 'configure oslo_messaging_rabbit default params' do
is_expected.to contain_keystone_config('oslo_messaging_rabbit/amqp_durable_queues').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_missing_consumer_retry_timeout').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_failover_strategy').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_compression').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_qos_prefetch_count').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/ssl').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_login_method').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_retry_interval').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_retry_backoff').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_interval_max').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_transient_queues_ttl').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_rate').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_in_pthread').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/amqp_durable_queues').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_reconnect_delay').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_missing_consumer_retry_timeout').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_failover_strategy').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_compression').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_qos_prefetch_count').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/ssl').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_login_method').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_retry_interval').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_retry_backoff').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_interval_max').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_transient_queues_ttl').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_rate').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_in_pthread').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_queue').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_delivery_limit').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_max_memory_length').with_value('<SERVICE DEFAULT>')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_max_memory_bytes').with_value('<SERVICE DEFAULT>')
end
end
context 'with overridden parameters' do
let :params do
{ :rabbit_qos_prefetch_count => '10',
:heartbeat_timeout_threshold => '60',
:heartbeat_rate => '10',
:heartbeat_in_pthread => true,
:kombu_compression => 'bz2',
:rabbit_ha_queues => true, }
{
:rabbit_qos_prefetch_count => 10,
:heartbeat_timeout_threshold => 60,
:heartbeat_rate => 10,
:heartbeat_in_pthread => true,
:kombu_compression => 'bz2',
:rabbit_ha_queues => true,
:rabbit_quorum_queue => true,
:rabbit_quorum_delivery_limit => 3,
:rabbit_quorum_max_memory_length => 5,
:rabbit_quorum_max_memory_bytes => 1073741824,
}
end
it 'configures rabbit' do
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_qos_prefetch_count').with_value('10')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value('60')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_rate').with_value('10')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_qos_prefetch_count').with_value(10)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_timeout_threshold').with_value(60)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_rate').with_value(10)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/heartbeat_in_pthread').with_value(true)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/kombu_compression').with_value('bz2')
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_ha_queues').with_value(true)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_queue').with_value(true)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_delivery_limit').with_value(3)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_max_memory_length').with_value(5)
is_expected.to contain_keystone_config('oslo_messaging_rabbit/rabbit_quorum_max_memory_bytes').with_value(1073741824)
end
end