[pve-devel] applied: [PATCH v2 ha-manager] Resource/API: abort early if resource in error state

Wolfgang Bumiller w.bumiller at proxmox.com
Tue Mar 14 10:46:48 CET 2017


applied

On Tue, Jan 24, 2017 at 05:54:03PM +0100, 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;
> -- 
> 2.1.4




More information about the pve-devel mailing list