Restart only specific services after config change

Currently we restart all swift services regardless of the config file
being updated. This is very redundant, because some config files affect
only specific services (eg. account-server.conf is used only by
account-* daemons).

This introduces new "sub" tags such as swift-account-service and limit
the services being restarted.

Change-Id: Idfa09b63d291b0f71686554cb7c7b0597cb8842c
This commit is contained in:
Takashi Kajinami 2023-07-24 14:21:28 +09:00
parent 437090abf3
commit 3c89736ffe
15 changed files with 59 additions and 45 deletions

@ -91,7 +91,6 @@ class swift::containerreconciler(
) inherits swift::params {
include swift::deps
Swift_config<| |> ~> Service['swift-container-reconciler']
Swift_container_reconciler_config<||> ~> Service['swift-container-reconciler']
# only add memcache servers if 'cache' is included in the pipeline

@ -21,48 +21,38 @@ class swift::deps {
~> anchor { 'swift::service::end': }
~> Swift_dispersion_config<||>
Anchor['swift::config::begin']
-> Swift_proxy_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_proxy_config<||> -> Anchor['swift::config::end']
Swift_proxy_config<||> ~> Service<| tag == 'swift-proxy-service' |>
Anchor['swift::config::begin']
-> Swift_storage_policy<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_storage_policy<||> -> Anchor['swift::config::end']
# storage policy is now used by proxy and object
Swift_storage_policy<||> ~> Service<| tag == 'swift-proxy-service' |>
Swift_storage_policy<||> ~> Service<| tag == 'swift-object-service' |>
Anchor['swift::config::begin']
-> Swift_object_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_object_config<||> -> Anchor['swift::config::end']
Swift_object_config<||> ~> Service<| tag == 'swift-object-service' |>
Anchor['swift::config::begin']
-> Swift_container_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_container_config<||> -> Anchor['swift::config::end']
Swift_container_config<||> ~> Service<| tag == 'swift-container-service' |>
Anchor['swift::config::begin']
-> Swift_account_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_account_config<||> -> Anchor['swift::config::end']
Swift_account_config<||> ~> Service<| tag == 'swift-account-service' |>
Anchor['swift::config::begin']
-> Swift_internal_client_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_internal_client_config<||> ~> Anchor['swift::config::end']
# On any uwsgi config change, we must restart Swift.
Anchor['swift::config::begin']
-> Swift_proxy_uwsgi_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_proxy_uwsgi_config<||> -> Anchor['swift::config::end']
Swift_proxy_uwsgi_config<||> ~> Service<| tag == 'swift-proxy-service' |>
Anchor['swift::config::begin']
-> Swift_account_uwsgi_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_account_uwsgi_config<||> -> Anchor['swift::config::end']
Swift_account_uwsgi_config<||> ~> Service<| tag == 'swift-account-service' |>
Anchor['swift::config::begin']
-> Swift_container_uwsgi_config<||>
~> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_container_uwsgi_config<||> -> Anchor['swift::config::end']
Swift_container_uwsgi_config<||> ~> Service<| tag == 'swift-container-service' |>
# drive-audit.conf is not used by swift services, so any change in the file
# should not trigger restarting services.
Anchor['swift::config::begin']
-> Swift_drive_audit_config<||>
-> Anchor['swift::config::end']
Anchor['swift::config::begin'] -> Swift_drive_audit_config<||> -> Anchor['swift::config::end']
# Support packages need to be installed in the install phase, but we don't
# put them in the chain above because we don't want any false dependencies

@ -133,7 +133,6 @@ class swift::objectexpirer(
) inherits swift::params {
include swift::deps
Swift_config<| |> ~> Service['swift-object-expirer']
Swift_object_expirer_config<||> ~> Service['swift-object-expirer']
if $auto_create_account_prefix != undef {

@ -318,7 +318,8 @@ class swift::proxy(
enabled => $enabled,
config_file_name => 'proxy-server.conf',
service_provider => $service_provider,
service_require => Class[$required_classes]
service_require => Class[$required_classes],
service_tag => 'swift-proxy-service',
}
} else {
exec { 'vadate-proxy-pipeline':

@ -38,6 +38,9 @@
# [*service_require*]
# (optional) Parameter used to pass in resources that this service requires.
#
# [*service_tag*]
# (optional) Additional tag to be added to the service resource
#
define swift::service(
$os_family_service_name,
$config_file_name,
@ -46,6 +49,7 @@ define swift::service(
$service_provider = $::swift::params::service_provider,
$service_subscribe = undef,
$service_require = undef,
$service_tag = undef,
) {
include swift::deps
@ -55,6 +59,8 @@ define swift::service(
fail("swift::service name: ${name} is not a valid swift_init_service_name")
}
$tag = delete_undef_values(['swift-service', $service_tag])
if $service_provider != 'swiftinit' {
service { $name:
ensure => $service_ensure,
@ -62,7 +68,7 @@ define swift::service(
hasstatus => true,
enable => $enabled,
provider => $service_provider,
tag => 'swift-service',
tag => $tag,
subscribe => $service_subscribe,
require => $service_require,
}
@ -75,7 +81,7 @@ define swift::service(
provider => 'swiftinit',
pattern => $os_family_service_name,
manifest => $config_file_name,
tag => 'swift-service',
tag => $tag,
subscribe => $service_subscribe,
require => $service_require,
}

@ -57,6 +57,7 @@ class swift::storage::account(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => 'swift-account-service',
}
}
}

@ -63,6 +63,7 @@ class swift::storage::container(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => 'swift-container-service',
}
swift::service { 'swift-container-sync':
@ -71,6 +72,7 @@ class swift::storage::container(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => 'swift-container-service',
}
swift::service { 'swift-container-sharder':
@ -79,6 +81,7 @@ class swift::storage::container(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => 'swift-container-service',
}
}
}

@ -73,6 +73,7 @@ define swift::storage::generic(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => "swift-${name}-service",
}
swift::service { "swift-${name}-replicator":
@ -81,6 +82,7 @@ define swift::storage::generic(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => "swift-${name}-service",
}
swift::service { "swift-${name}-auditor":
@ -89,6 +91,7 @@ define swift::storage::generic(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => "swift-${name}-service",
}
}
}

@ -57,6 +57,7 @@ class swift::storage::object(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => 'swift-object-service',
}
swift::service { 'swift-object-reconstructor':
@ -65,6 +66,7 @@ class swift::storage::object(
enabled => $enabled,
config_file_name => $config_file_name,
service_provider => $service_provider,
service_tag => 'swift-object-service',
}
}
}

@ -0,0 +1,12 @@
---
features:
- |
The new ``service_tag`` parameter has been added to
the ``swift::service`` defined resource type. This parameter controls
the additional tag added to the service resource in addition to
the default ``swift-service`` tag.
fixes:
- |
This module no longer restarts all services after updating config files,
but restrts only the relevant services.

@ -43,7 +43,7 @@ describe 'swift::proxy' do
:provider => nil,
:enable => true,
:hasstatus => true,
:tag => 'swift-service',
:tag => ['swift-service', 'swift-proxy-service'],
)}
it { should contain_service('swift-proxy-server').that_subscribes_to('Anchor[swift::service::begin]') }
@ -106,8 +106,6 @@ describe 'swift::proxy' do
include swift::proxy::copy
"
end
it { should contain_swift_proxy_config('foo/bar').with_value('foo').that_notifies('Anchor[swift::config::end]') }
end
describe 'when more parameters are set' do
@ -316,7 +314,7 @@ describe 'swift::proxy' do
:ensure => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running' : 'stopped',
:enable => param_hash[:enabled],
:provider => nil,
:tag => 'swift-service',
:tag => ['swift-service', 'swift-proxy-service'],
)
end
end

@ -39,7 +39,7 @@ describe 'swift::storage::account' do
:ensure => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running' : 'stopped',
:enable => param_hash[:enabled],
:provider => nil,
:tag => 'swift-service',
:tag => ['swift-service', 'swift-account-service'],
)
end
end

@ -40,7 +40,7 @@ describe 'swift::storage::container' do
:ensure => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running' : 'stopped',
:enable => param_hash[:enabled],
:provider => nil,
:tag => 'swift-service',
:tag => ['swift-service', 'swift-container-service'],
)
end
end

@ -40,7 +40,7 @@ describe 'swift::storage::object' do
:ensure => (param_hash[:manage_service] && param_hash[:enabled]) ? 'running' : 'stopped',
:enable => param_hash[:enabled],
:provider => nil,
:tag => 'swift-service',
:tag => ['swift-service', 'swift-object-service'],
)
end
end

@ -77,7 +77,7 @@ describe 'swift::storage::generic' do
:ensure => (param_hash_manage[:manage_service] && param_hash_manage[:enabled]) ? 'running' : 'stopped',
:enable => param_hash_manage[:enabled],
:provider => param_set[:service_provider],
:tag => 'swift-service'
:tag => ['swift-service', "swift-#{t}-service"],
)
end
@ -87,7 +87,7 @@ describe 'swift::storage::generic' do
:ensure => (param_hash_manage[:manage_service] && param_hash_manage[:enabled]) ? 'running' : 'stopped',
:enable => param_hash_manage[:enabled],
:provider => param_set[:service_provider],
:tag => 'swift-service'
:tag => ['swift-service', "swift-#{t}-service"],
)
end
@ -97,7 +97,7 @@ describe 'swift::storage::generic' do
:ensure => (param_hash_manage[:manage_service] && param_hash_manage[:enabled]) ? 'running' : 'stopped',
:enable => param_hash_manage[:enabled],
:provider => param_set[:service_provider],
:tag => 'swift-service'
:tag => ['swift-service', "swift-#{t}-service"],
)
end