[pve-devel] applied: [PATCH container 1/2] Revert "poststop: reboot: wait for lxc to exit before rebooting"

Fabian Grünbichler f.gruenbichler at proxmox.com
Fri Mar 10 13:58:36 CET 2017


both patches to stable-4 and master

On Fri, Mar 10, 2017 at 11:25:40AM +0100, Wolfgang Bumiller wrote:
> This reverts commit ff867097e8a5ea1ab6ff1d5cbc381a4212c37254.
> ---
> This won't work and the lxc-wait only hid the fact that it is still
> a race condition: lxc sends the STOPPED state before doing cgroup
> cleanups...
> 
>  src/lxc-pve-poststop-hook | 35 ++---------------------------------
>  1 file changed, 2 insertions(+), 33 deletions(-)
> 
> diff --git a/src/lxc-pve-poststop-hook b/src/lxc-pve-poststop-hook
> index e3a8956..a4302d6 100755
> --- a/src/lxc-pve-poststop-hook
> +++ b/src/lxc-pve-poststop-hook
> @@ -9,7 +9,6 @@ exit 0 if $ENV{LXC_NAME} && $ENV{LXC_NAME} !~ /^\d+$/;
>  
>  use POSIX;
>  use File::Path;
> -use IO::Pipe;
>  
>  use PVE::SafeSyslog;
>  use PVE::Tools;
> @@ -82,39 +81,9 @@ __PACKAGE__->register_method ({
>  	    # that we must not block because we're part of the service cgroup
>  	    # systemd waits for to die before issuing the new lxc-start command.
>  	    PVE::LXC::update_lxc_config($vmid, $conf);
> -	    $SIG{HUP} = 'IGNORE';
> -	    # Synchronization pipe
> -	    my $scope = IO::Pipe->new() or die "pipe failed: $!\n";
> -	    my $pid = fork();
> -	    die "fork failed: $!\n" if !defined($pid);
> -	    if (!$pid) {
> -		$scope->writer();
> -		# We inherit a pipe from LXC, replace it with stderr otherwise
> -		# lxc will keep waiting for us...
> -		POSIX::dup2(2, 1);
> -		POSIX::setsid();
> -		eval {
> -		    # Change scope otherwise we're part of lxc at .service and then
> -		    # if lxc finishes cleaning up before we restart it systemd
> -		    # might clean US up as well (read: kill us) => race
> -		    PVE::Tools::enter_systemd_scope("restart-$vmid", "Restarter for Proxmox VE CT $vmid",
> -		        Slice => 'lxc.slice',
> -		        KillMode => 'none');
> -		    # Tell the main stop hook we're "in the clear":
> -		    close($scope);
> -		    # Wait for the container to clean up everything...
> -		    PVE::Tools::run_command(['lxc-wait', "--name=$vmid", '--state=STOPPED']);
> -		    # ... before finally triggering a restart:
> -		    PVE::Tools::run_command(['systemctl', 'restart', "lxc\@$vmid"]);
> -		};
> -		warn "$@" if $@;
> -		POSIX::_exit(0);
> -	    }
> -	    # Wait for the restarter scope to make sure systemd doesn't kill it before it started...
> -	    $scope->reader();
> -	    <$scope>;
> +	    PVE::Tools::run_command(['systemctl', '--no-block', 'restart', "lxc\@$vmid"]);
>  	    # cause lxc to stop instead of rebooting
> -	    exit(1);
> +	    POSIX::_exit(1);
>  	}
>  
>  	return undef;
> -- 
> 2.1.4
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel




More information about the pve-devel mailing list