From 97439670bcbd74c780db5063248d3a9b9d29d7fd Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 17 Jan 2012 11:25:44 +0100 Subject: [PATCH] online migration fix: close tunnel later, wait for connection close --- Makefile | 2 +- PVE/QemuMigrate.pm | 40 ++++++++++++++++++++++++++++------------ changelog.Debian | 6 ++++++ 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 9093568c..d96c8158 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ RELEASE=2.0 VERSION=2.0 PACKAGE=qemu-server -PKGREL=14 +PKGREL=15 DESTDIR= PREFIX=/usr diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm index 356e7210..be74bfe9 100644 --- a/PVE/QemuMigrate.pm +++ b/PVE/QemuMigrate.pm @@ -39,7 +39,7 @@ sub fork_command_pipe { } sub finish_command_pipe { - my ($self, $cmdpipe) = @_; + my ($self, $cmdpipe, $timeout) = @_; my $writer = $cmdpipe->{writer}; my $reader = $cmdpipe->{reader}; @@ -49,9 +49,25 @@ sub finish_command_pipe { my $cpid = $cmdpipe->{pid}; - kill(15, $cpid) if kill(0, $cpid); + if ($timeout) { + for (my $i = 0; $i < $timeout; $i++) { + return if !PVE::ProcFSTools::check_process_running($cpid); + sleep(1); + } + } - waitpid($cpid, 0); + $self->log('info', "ssh tunnel still running - terminating now with SIGTERM\n"); + kill(15, $cpid); + + # wait again + for (my $i = 0; $i < 10; $i++) { + return if !PVE::ProcFSTools::check_process_running($cpid); + sleep(1); + } + + $self->log('info', "ssh tunnel still running - terminating now with SIGKILL\n"); + kill 9, $cpid; + sleep 1; } sub fork_tunnel { @@ -94,7 +110,7 @@ sub finish_tunnel { }; my $err = $@; - $self->finish_command_pipe($tunnel); + $self->finish_command_pipe($tunnel, 30); die $err if $err; } @@ -366,14 +382,6 @@ sub phase3 { last if $err =~ /^interrupted by signal$/; } } - - if ($self->{tunnel}) { - eval { finish_tunnel($self, $self->{tunnel}); }; - if (my $err = $@) { - $self->log('err', $err); - $self->{errors} = 1; - } - } } sub phase3_cleanup { @@ -388,6 +396,14 @@ sub phase3_cleanup { $self->{errors} = 1; } + if ($self->{tunnel}) { + eval { finish_tunnel($self, $self->{tunnel}); }; + if (my $err = $@) { + $self->log('err', $err); + $self->{errors} = 1; + } + } + # always deactivate volumes - avoid lvm LVs to be active on several nodes eval { my $vollist = PVE::QemuServer::get_vm_volumes($conf); diff --git a/changelog.Debian b/changelog.Debian index e4371535..4de5b22d 100644 --- a/changelog.Debian +++ b/changelog.Debian @@ -1,3 +1,9 @@ +qemu-server (2.0-15) unstable; urgency=low + + * online migration fix: close tunnel later, wait for connection close + + -- Proxmox Support Team Tue, 17 Jan 2012 11:24:56 +0100 + qemu-server (2.0-14) unstable; urgency=low * use 'da' instead of 'dk' for Danish keyboard (qemu use that name)