[pve-devel] [PATCH container 2/2] vm_stop: add nokill-after-timeout parameter

Oguz Bektas o.bektas at proxmox.com
Thu May 9 19:11:38 CEST 2019


looks like we have a race in lxc-stop in some cases, will look into it
later but it seems to be functioning properly.

tested series, everything looks fine.

Tested-by: Oguz Bektas <o.bektas at proxmox.com>

On Wed, May 08, 2019 at 02:02:43PM +0200, Thomas Lamprecht wrote:
> 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) };
> > 
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel




More information about the pve-devel mailing list