On 10/2/19 11:46 AM, Fabian Ebner wrote:
> Introduces a timeout parameter for shutting a resource down.
> If the parameter is 0, we perform a hard stop instead of a shutdown.
> 
> Signed-off-by: Fabian Ebner <f.eb...@proxmox.com>
> ---
>  src/PVE/HA/LRM.pm             |  4 ++--
>  src/PVE/HA/Resources.pm       |  2 +-
>  src/PVE/HA/Resources/PVECT.pm | 14 ++++++++++----
>  src/PVE/HA/Resources/PVEVM.pm | 16 +++++++++++-----
>  4 files changed, 24 insertions(+), 12 deletions(-)
> 
> diff --git a/src/PVE/HA/LRM.pm b/src/PVE/HA/LRM.pm
> index 3b4a572..e5eee94 100644
> --- a/src/PVE/HA/LRM.pm
> +++ b/src/PVE/HA/LRM.pm
> @@ -535,7 +535,7 @@ sub manage_resources {
>       my $req_state = $sd->{state};
>       next if !defined($req_state);
>       next if $req_state eq 'freeze';
> -     $self->queue_resource_command($sid, $sd->{uid}, $req_state, {'target' 
> => $sd->{target}});
> +     $self->queue_resource_command($sid, $sd->{uid}, $req_state, {'target' 
> => $sd->{target}, 'timeout' => $sd->{timeout}});

hmm, why don't we transformed this so that we just can to 

self->queue_resource_command($sid, $sd->{uid}, $req_state, $sd->{params});

as this is already long and seeming a bit unwieldy...

>      }
>  
>      return $self->run_workers();
> @@ -776,7 +776,7 @@ sub exec_resource_agent {
>  
>       $haenv->log("info", "stopping service $sid");
>  
> -     $plugin->shutdown($haenv, $id);
> +     $plugin->shutdown($haenv, $id, $params->{timeout});
>  
>       $running = $plugin->check_running($haenv, $id);
>  
> diff --git a/src/PVE/HA/Resources.pm b/src/PVE/HA/Resources.pm
> index 7c373bc..835c314 100644
> --- a/src/PVE/HA/Resources.pm
> +++ b/src/PVE/HA/Resources.pm
> @@ -126,7 +126,7 @@ sub start {
>  }
>  
>  sub shutdown {
> -    my ($class, $haenv, $id) = @_;
> +    my ($class, $haenv, $id, $timeout) = @_;
>  
>      die "implement in subclass";
>  }
> diff --git a/src/PVE/HA/Resources/PVECT.pm b/src/PVE/HA/Resources/PVECT.pm
> index a0f05f4..282f4ef 100644
> --- a/src/PVE/HA/Resources/PVECT.pm
> +++ b/src/PVE/HA/Resources/PVECT.pm
> @@ -74,18 +74,24 @@ sub start {
>  }
>  
>  sub shutdown {
> -    my ($class, $haenv, $id) = @_;
> +    my ($class, $haenv, $id, $timeout) = @_;
>  
>      my $nodename = $haenv->nodename();
> -    my $shutdown_timeout = 60; # fixme: make this configurable
> +    my $shutdown_timeout = $timeout // 60;
>  
> +    my $upid;
>      my $params = {
>       node => $nodename,
>       vmid => $id,
> -     timeout => $shutdown_timeout,
>      };
>  
> -    my $upid = PVE::API2::LXC::Status->vm_shutdown($params);
> +    if ($shutdown_timeout) {
> +     $params->{timeout} = $shutdown_timeout;
> +     $upid = PVE::API2::LXC::Status->vm_shutdown($params);
> +    } else {
> +     $upid = PVE::API2::LXC::Status->vm_stop($params);
> +    }
> +
>      PVE::HA::Tools::upid_wait($upid, $haenv);
>  }
>  
> diff --git a/src/PVE/HA/Resources/PVEVM.pm b/src/PVE/HA/Resources/PVEVM.pm
> index 9dcf558..45d87e8 100644
> --- a/src/PVE/HA/Resources/PVEVM.pm
> +++ b/src/PVE/HA/Resources/PVEVM.pm
> @@ -72,19 +72,25 @@ sub start {
>  }
>  
>  sub shutdown {
> -    my ($class, $haenv, $id) = @_;
> +    my ($class, $haenv, $id, $timeout) = @_;
>  
>      my $nodename = $haenv->nodename();
> -    my $shutdown_timeout = 60; # fixme: make this configurable
> +    my $shutdown_timeout = $timeout // 60;
>  
> +    my $upid;
>      my $params = {
>       node => $nodename,
>       vmid => $id,
> -     timeout => $shutdown_timeout,
> -     forceStop => 1,
>      };
>  
> -    my $upid = PVE::API2::Qemu->vm_shutdown($params);
> +    if ($shutdown_timeout) {
> +     $params->{timeout} = $shutdown_timeout;
> +     $params->{forceStop} = 1;
> +     $upid = PVE::API2::Qemu->vm_shutdown($params);
> +    } else {
> +     $upid = PVE::API2::Qemu->vm_stop($params);
> +    }
> +
>      PVE::HA::Tools::upid_wait($upid, $haenv);
>  }
>  
> 


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

Reply via email to