[pve-devel] [PATCH container 2/2] vm_stop: add nokill-after-timeout parameter
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed May 8 14:02:43 CEST 2019
On 5/8/19 1:58 PM, Thomas Lamprecht wrote:
> This allows to have the same semantics as qemu-server:
> * immediate hard-kill
> * shutdown with kill after timeout
> * shutdown without kill after timeout
>
> And thus we finally can move the vm_shutdown API call to a correct
> semantic, i.e., do not immediate hard kill if forceStop is not passed
> but rather see it as stop after timeout knob.
>
> Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
forgot: fixes #2200
> ---
> src/PVE/API2/LXC/Status.pm | 2 +-
> src/PVE/LXC.pm | 18 +++++++++++++-----
> 2 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/src/PVE/API2/LXC/Status.pm b/src/PVE/API2/LXC/Status.pm
> index 95775fe..f6668e2 100644
> --- a/src/PVE/API2/LXC/Status.pm
> +++ b/src/PVE/API2/LXC/Status.pm
> @@ -369,7 +369,7 @@ __PACKAGE__->register_method({
>
> PVE::LXC::Config->check_lock($conf);
>
> - PVE::LXC::vm_stop($vmid, $param->{forceStop}, $timeout);
> + PVE::LXC::vm_stop($vmid, 0, $timeout, !$param->{forceStop});
>
> return;
> };
> diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
> index f8fc37e..5d099ca 100644
> --- a/src/PVE/LXC.pm
> +++ b/src/PVE/LXC.pm
> @@ -1938,8 +1938,11 @@ sub vm_start {
> # This is necessary because we want the post-stop hook to have completed its
> # unmount-all step, but post-stop happens after lxc puts the container into the
> # STOPPED state.
> +# $kill - if true it will always do an immediate hard-stop
> +# $shutdown_timeout - the timeout to wait for a gracefull shutdown
> +# $nokill_after_timeout - if true, do not send a hardstop if shutdown timed out
> sub vm_stop {
> - my ($vmid, $kill, $shutdown_timeout) = @_;
> + my ($vmid, $kill, $shutdown_timeout, $nokill_after_timeout) = @_;
>
> # Open the container's command socket.
> my $path = "\0/var/lib/lxc/$vmid/command";
> @@ -1961,10 +1964,15 @@ sub vm_stop {
>
> if ($kill) {
> push @$cmd, '--kill'; # doesn't allow timeouts
> - } elsif (defined($shutdown_timeout)) {
> - push @$cmd, '--timeout', $shutdown_timeout;
> - # Give run_command 5 extra seconds
> - $shutdown_timeout += 5;
> + } else {
> + # lxc-stop uses a default timeout
> + push @$cmd, '--nokill' if $nokill_after_timeout;
> +
> + if (defined($shutdown_timeout)) {
> + push @$cmd, '--timeout', $shutdown_timeout;
> + # Give run_command 5 extra seconds
> + $shutdown_timeout += 5;
> + }
> }
>
> eval { PVE::Tools::run_command($cmd, timeout => $shutdown_timeout) };
>
More information about the pve-devel
mailing list