ratelimit: Support options for container access ratelimit

This change introduces support for the following two options which
controls rate limit for container access.
 - container_ratelimit_<size> = <rate>
 - container_listing_ratelimit_<size> = <rate>

Change-Id: Ibed7f31e9ad472ac490ac6a2933ffa2c8329f376
This commit is contained in:
Takashi Kajinami
2022-09-05 00:16:37 +09:00
parent 12bb9f0cfe
commit 9686d3e41b
3 changed files with 70 additions and 5 deletions

View File

@@ -27,6 +27,14 @@
# (optional) if >0, limits PUT and DELETE requests to containers # (optional) if >0, limits PUT and DELETE requests to containers
# Defaults to $::os_service_default. # Defaults to $::os_service_default.
# #
# [*container_ratelimit*]
# (optional) Hash of size(keys) and requests per seconds(values).
# Defaults to {}.
#
# [*container_listing_ratelimit*]
# (optional) Hash of size(keys) and requests per seconds(values).
# Defaults to {}.
#
# == Dependencies # == Dependencies
# #
# == Examples # == Examples
@@ -44,11 +52,16 @@ class swift::proxy::ratelimit(
$max_sleep_time_seconds = $::os_service_default, $max_sleep_time_seconds = $::os_service_default,
$log_sleep_time_seconds = $::os_service_default, $log_sleep_time_seconds = $::os_service_default,
$rate_buffer_seconds = $::os_service_default, $rate_buffer_seconds = $::os_service_default,
$account_ratelimit = $::os_service_default $account_ratelimit = $::os_service_default,
$container_ratelimit = {},
$container_listing_ratelimit = {},
) { ) {
include swift::deps include swift::deps
validate_legacy(Hash, 'validate_hash', $container_ratelimit)
validate_legacy(Hash, 'validate_hash', $container_listing_ratelimit)
swift_proxy_config { swift_proxy_config {
'filter:ratelimit/use': value => 'egg:swift#ratelimit'; 'filter:ratelimit/use': value => 'egg:swift#ratelimit';
'filter:ratelimit/clock_accuracy': value => $clock_accuracy; 'filter:ratelimit/clock_accuracy': value => $clock_accuracy;
@@ -57,4 +70,16 @@ class swift::proxy::ratelimit(
'filter:ratelimit/rate_buffer_seconds': value => $rate_buffer_seconds; 'filter:ratelimit/rate_buffer_seconds': value => $rate_buffer_seconds;
'filter:ratelimit/account_ratelimit': value => $account_ratelimit; 'filter:ratelimit/account_ratelimit': value => $account_ratelimit;
} }
$container_ratelimit.each | $size, $limit | {
swift_proxy_config {
"filter:ratelimit/container_ratelimit_${size}": value => $limit;
}
}
$container_listing_ratelimit.each | $size, $limit | {
swift_proxy_config {
"filter:ratelimit/container_listing_ratelimit_${size}": value => $limit;
}
}
} }

View File

@@ -0,0 +1,8 @@
---
features:
- |
The ``swift::proxy::ratelimit`` class now supports the following two new
parameters. These parameters accept hash of container size and limit.
- ``container_ratelimit``
- ``container_listing_ratelimit``

View File

@@ -28,6 +28,38 @@ describe 'swift::proxy::ratelimit' do
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/rate_buffer_seconds').with_value('5') } it { is_expected.to contain_swift_proxy_config('filter:ratelimit/rate_buffer_seconds').with_value('5') }
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/account_ratelimit').with_value('0') } it { is_expected.to contain_swift_proxy_config('filter:ratelimit/account_ratelimit').with_value('0') }
end end
describe "with container ratelimit" do
let :params do
{
:container_ratelimit => {
0 => 100,
10 => 50,
50 => 20
}
}
end
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_ratelimit_0').with_value(100) }
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_ratelimit_10').with_value(50) }
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_ratelimit_50').with_value(20) }
end
describe "with container listing ratelimit" do
let :params do
{
:container_listing_ratelimit => {
0 => 100,
10 => 50,
50 => 20
}
}
end
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_listing_ratelimit_0').with_value(100) }
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_listing_ratelimit_10').with_value(50) }
it { is_expected.to contain_swift_proxy_config('filter:ratelimit/container_listing_ratelimit_50').with_value(20) }
end
end end
on_supported_os({ on_supported_os({