[pve-devel] [PATCH v2 ha-manager] Resource/API: abort early if resource in error state
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed Feb 15 09:49:42 CET 2017
any comments here?
On 01/24/2017 05:54 PM, Thomas Lamprecht wrote:
> If a service is in error state the single state change command that
> can make sense is setting the disabled request state.
> Thus abort on all other commands early to enhance user experience.
> ---
>
> changes since v1:
> * factored out the error check in a function
>
> src/PVE/API2/HA/Resources.pm | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/src/PVE/API2/HA/Resources.pm b/src/PVE/API2/HA/Resources.pm
> index 621c9e6..d57824b 100644
> --- a/src/PVE/API2/HA/Resources.pm
> +++ b/src/PVE/API2/HA/Resources.pm
> @@ -34,6 +34,18 @@ my $api_copy_config = sub {
> return $scfg;
> };
>
> +sub check_service_state {
> + my ($sid, $req_state) = @_;
> +
> + my $service_status = PVE::HA::Config::get_service_status($sid);
> + if ($service_status->{managed} && $service_status->{state} eq 'error') {
> + # service in error state, must get disabled before new state request
> + # can be executed
> + return if defined($req_state) && $req_state eq 'disabled';
> + die "service '$sid' in error state, must be disabled and fixed first\n";
> + }
> +}
> +
> __PACKAGE__->register_method ({
> name => 'index',
> path => '',
> @@ -187,6 +199,8 @@ __PACKAGE__->register_method ({
> if !$group_cfg->{ids}->{$group};
> }
>
> + check_service_state($sid, $param->{state});
> +
> PVE::HA::Config::lock_ha_domain(
> sub {
>
> @@ -288,6 +302,8 @@ __PACKAGE__->register_method ({
>
> PVE::HA::Config::service_is_ha_managed($sid);
>
> + check_service_state($sid);
> +
> PVE::HA::Config::queue_crm_commands("migrate $sid $param->{node}");
>
> return undef;
> @@ -319,6 +335,8 @@ __PACKAGE__->register_method ({
>
> PVE::HA::Config::service_is_ha_managed($sid);
>
> + check_service_state($sid);
> +
> PVE::HA::Config::queue_crm_commands("relocate $sid $param->{node}");
>
> return undef;
More information about the pve-devel
mailing list