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. # will be run through a green thread.
# Defaults to $facts['os_service_default'] # 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( define oslo::messaging::rabbit(
$amqp_durable_queues = $facts['os_service_default'], $amqp_durable_queues = $facts['os_service_default'],
$kombu_ssl_version = $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_timeout_threshold = $facts['os_service_default'],
$heartbeat_rate = $facts['os_service_default'], $heartbeat_rate = $facts['os_service_default'],
$heartbeat_in_pthread = $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)) $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') fail('Unsupported Kombu compression. Possible values are gzip and bz2')
} }
$rabbit_options = { 'oslo_messaging_rabbit/amqp_durable_queues' => { value => $amqp_durable_queues }, $rabbit_options = {
'oslo_messaging_rabbit/heartbeat_rate' => { value => $heartbeat_rate }, 'oslo_messaging_rabbit/amqp_durable_queues' => { value => $amqp_durable_queues },
'oslo_messaging_rabbit/heartbeat_in_pthread' => { value => $heartbeat_in_pthread }, 'oslo_messaging_rabbit/heartbeat_rate' => { value => $heartbeat_rate },
'oslo_messaging_rabbit/heartbeat_timeout_threshold' => { value => $heartbeat_timeout_threshold }, 'oslo_messaging_rabbit/heartbeat_in_pthread' => { value => $heartbeat_in_pthread },
'oslo_messaging_rabbit/kombu_compression' => { value => $kombu_compression }, 'oslo_messaging_rabbit/heartbeat_timeout_threshold' => { value => $heartbeat_timeout_threshold },
'oslo_messaging_rabbit/kombu_failover_strategy' => { value => $kombu_failover_strategy }, 'oslo_messaging_rabbit/kombu_compression' => { value => $kombu_compression },
'oslo_messaging_rabbit/kombu_missing_consumer_retry_timeout' => { value => $kombu_missing_consumer_retry_timeout }, 'oslo_messaging_rabbit/kombu_failover_strategy' => { value => $kombu_failover_strategy },
'oslo_messaging_rabbit/kombu_reconnect_delay' => { value => $kombu_reconnect_delay }, 'oslo_messaging_rabbit/kombu_missing_consumer_retry_timeout' => { value => $kombu_missing_consumer_retry_timeout },
'oslo_messaging_rabbit/rabbit_interval_max' => { value => $rabbit_interval_max }, 'oslo_messaging_rabbit/kombu_reconnect_delay' => { value => $kombu_reconnect_delay },
'oslo_messaging_rabbit/rabbit_login_method' => { value => $rabbit_login_method }, 'oslo_messaging_rabbit/rabbit_interval_max' => { value => $rabbit_interval_max },
'oslo_messaging_rabbit/rabbit_retry_backoff' => { value => $rabbit_retry_backoff }, 'oslo_messaging_rabbit/rabbit_login_method' => { value => $rabbit_login_method },
'oslo_messaging_rabbit/rabbit_retry_interval' => { value => $rabbit_retry_interval }, 'oslo_messaging_rabbit/rabbit_retry_backoff' => { value => $rabbit_retry_backoff },
'oslo_messaging_rabbit/rabbit_transient_queues_ttl' => { value => $rabbit_transient_queues_ttl }, 'oslo_messaging_rabbit/rabbit_retry_interval' => { value => $rabbit_retry_interval },
'oslo_messaging_rabbit/ssl' => { value => $rabbit_use_ssl }, 'oslo_messaging_rabbit/rabbit_transient_queues_ttl' => { value => $rabbit_transient_queues_ttl },
'oslo_messaging_rabbit/rabbit_qos_prefetch_count' => { value => $rabbit_qos_prefetch_count }, 'oslo_messaging_rabbit/ssl' => { value => $rabbit_use_ssl },
'oslo_messaging_rabbit/rabbit_ha_queues' => { value => $rabbit_ha_queues }, 'oslo_messaging_rabbit/rabbit_qos_prefetch_count' => { value => $rabbit_qos_prefetch_count },
'oslo_messaging_rabbit/ssl_ca_file' => { value => $kombu_ssl_ca_certs }, 'oslo_messaging_rabbit/rabbit_ha_queues' => { value => $rabbit_ha_queues },
'oslo_messaging_rabbit/ssl_cert_file' => { value => $kombu_ssl_certfile }, 'oslo_messaging_rabbit/rabbit_quorum_queue' => { value => $rabbit_quorum_queue },
'oslo_messaging_rabbit/ssl_key_file' => { value => $kombu_ssl_keyfile }, 'oslo_messaging_rabbit/rabbit_quorum_delivery_limit' => { value => $rabbit_quorum_delivery_limit },
'oslo_messaging_rabbit/ssl_version' => { value => $kombu_ssl_version }, '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) 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 context 'with default parameters' do
it 'configure oslo_messaging_rabbit default params' 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/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_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_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_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/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/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/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_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_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_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_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_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/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_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_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/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
end end
context 'with overridden parameters' do context 'with overridden parameters' do
let :params do let :params do
{ :rabbit_qos_prefetch_count => '10', {
:heartbeat_timeout_threshold => '60', :rabbit_qos_prefetch_count => 10,
:heartbeat_rate => '10', :heartbeat_timeout_threshold => 60,
:heartbeat_in_pthread => true, :heartbeat_rate => 10,
:kombu_compression => 'bz2', :heartbeat_in_pthread => true,
:rabbit_ha_queues => 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 end
it 'configures rabbit' do 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/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_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_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/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/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_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
end end