[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