[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