[pve-devel] [PATCH v3 ha-manager 4/9] Add timeout parameter for shutdown
Thomas Lamprecht
t.lamprecht at proxmox.com
Fri Oct 4 17:34:58 CEST 2019
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.ebner at 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);
> }
>
>
More information about the pve-devel
mailing list