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

Wolfgang Bumiller w.bumiller at proxmox.com
Fri Mar 10 11:25:40 CET 2017


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





More information about the pve-devel mailing list