[pve-devel] [PATCH 7/7] cleanup ressources on target host at phase2_cleanup.
Alexandre Derumier
aderumier at odiso.com
Tue Aug 21 12:21:55 CEST 2012
we call vm_stop to target host,
to be sure that kvm process is killed (but it should kill itself),
and deactivate volumes
Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
PVE/API2/Qemu.pm | 8 +++++++-
PVE/QemuMigrate.pm | 15 +++++++++++++--
PVE/QemuServer.pm | 10 +++++++++-
3 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 2087a75..71585a5 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -1277,6 +1277,7 @@ __PACKAGE__->register_method({
node => get_standard_option('pve-node'),
vmid => get_standard_option('pve-vmid'),
skiplock => get_standard_option('skiplock'),
+ migratedfrom => get_standard_option('pve-node',{ optional => 1 }),
timeout => {
description => "Wait maximal timeout seconds.",
type => 'integer',
@@ -1313,6 +1314,11 @@ __PACKAGE__->register_method({
raise_param_exc({ keepActive => "Only root may use this option." })
if $keepActive && $authuser ne 'root at pam';
+ my $migratedfrom = extract_param($param, 'migratedfrom');
+ raise_param_exc({ migratedfrom => "Only root may use this option." })
+ if $migratedfrom && $authuser ne 'root at pam';
+
+
my $storecfg = PVE::Storage::config();
if (&$vm_is_ha_managed($vmid) && $rpcenv->{type} ne 'ha') {
@@ -1340,7 +1346,7 @@ __PACKAGE__->register_method({
syslog('info', "stop VM $vmid: $upid\n");
PVE::QemuServer::vm_stop($storecfg, $vmid, $skiplock, 0,
- $param->{timeout}, 0, 1, $keepActive);
+ $param->{timeout}, 0, 1, $keepActive, $migratedfrom);
return;
};
diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm
index cb015cc..f31d6d9 100644
--- a/PVE/QemuMigrate.pm
+++ b/PVE/QemuMigrate.pm
@@ -382,6 +382,9 @@ sub phase2 {
sub phase2_cleanup {
my ($self, $vmid, $err) = @_;
+ return if !$self->{errors};
+ $self->{phase2errors} = 1;
+
$self->log('info', "aborting phase 2 - cleanup resources");
my $conf = $self->{vmconf};
@@ -391,15 +394,22 @@ sub phase2_cleanup {
$self->log('err', $err);
}
- ## fixme : vm_stop_cleanup on target vm
-
+ ## cleanup ressources on target host
+ my $nodename = PVE::INotify::nodename();
+ my $cmd = [@{$self->{rem_ssh}}, 'qm', 'stop', $vmid, '--skiplock', '--migratedfrom', $nodename];
+ eval{ PVE::Tools::run_command($cmd, outfunc => sub {}, errfunc => sub {}) };
+ if (my $err = $@) {
+ $self->log('err', $err);
+ $self->{errors} = 1;
+ }
}
sub phase3 {
my ($self, $vmid) = @_;
my $volids = $self->{volumes};
+ return if $self->{phase2errors};
# destroy local copies
foreach my $volid (@$volids) {
@@ -416,6 +426,7 @@ sub phase3_cleanup {
my ($self, $vmid, $err) = @_;
my $conf = $self->{vmconf};
+ return if $self->{phase2errors};
# move config to remote node
my $conffile = PVE::QemuServer::config_file($vmid);
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index f5b2d77..165e1e1 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -2924,12 +2924,20 @@ sub vm_stop_cleanup {
# We need that when migration VMs to other nodes (files already moved)
# Note: we set $keepActive in vzdump stop mode - volumes need to stay active
sub vm_stop {
- my ($storecfg, $vmid, $skiplock, $nocheck, $timeout, $shutdown, $force, $keepActive) = @_;
+ my ($storecfg, $vmid, $skiplock, $nocheck, $timeout, $shutdown, $force, $keepActive, $migratedfrom) = @_;
$timeout = 60 if !defined($timeout);
$force = 1 if !defined($force) && !$shutdown;
+ if($migratedfrom){
+ my $pid = check_running($vmid, $nocheck, $migratedfrom);
+ kill 15, $pid if $pid;
+ my $conf = load_config($vmid, $migratedfrom);
+ vm_stop_cleanup($storecfg, $vmid, $conf, $keepActive) if $conf;
+ return;
+ }
+
lock_config($vmid, sub {
my $pid = check_running($vmid, $nocheck);
--
1.7.2.5
More information about the pve-devel
mailing list