[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