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

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to