[pve-devel] [PATCH 13/14] convert migrate monitor commands to qmp

Alexandre Derumier aderumier at odiso.com
Mon Jun 25 10:02:57 CEST 2012


Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 PVE/QemuMigrate.pm |   38 ++++++++++++++++++++------------------
 1 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm
index 0dc81a5..85566c3 100644
--- a/PVE/QemuMigrate.pm
+++ b/PVE/QemuMigrate.pm
@@ -324,32 +324,34 @@ sub phase2 {
     # start migration
 
     my $start = time();
+    eval {
+        PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "migrate", uri => "tcp:localhost:$lport");
+    };
+    my $merr = $@;
 
-    my $merr = PVE::QemuServer::vm_monitor_command($vmid, "migrate -d \"tcp:localhost:$lport\"", 1);
-
-    my $lstat = '';
+    my $lstat = undef;
     while (1) {
 	sleep (2);
-	my $stat = PVE::QemuServer::vm_monitor_command($vmid, "info migrate", 1);
-	if ($stat =~ m/^Migration status: (active|completed|failed|cancelled)$/im) {
+	my $stat = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "query-migrate");
+	
+	if ($stat->{status} =~ m/^(active|completed|failed|cancelled)$/im) {
 	    $merr = undef;
-	    my $ms = $1;
 
-	    if ($stat ne $lstat) {
-		if ($ms eq 'active') {
+	    if ($stat->{ram}->{transferred} ne $lstat) {
+		if ($stat->{status} eq 'active') {
 		    my ($trans, $rem, $total) = (0, 0, 0);
-		    $trans = $1 if $stat =~ m/^transferred ram: (\d+) kbytes$/im;
-		    $rem = $1 if $stat =~ m/^remaining ram: (\d+) kbytes$/im;
-		    $total = $1 if $stat =~ m/^total ram: (\d+) kbytes$/im;
+		    $trans = sprintf "%.2f", $stat->{ram}->{transferred}/1024 if $stat->{ram}->{transferred};
+		    $rem = sprintf "%.2f", $stat->{ram}->{remaining}/1024 if $stat->{ram}->{remaining};
+   	            $total = sprintf "%.2f", $stat->{ram}->{total}/1024 if $stat->{ram}->{total};
 
-		    $self->log('info', "migration status: $ms (transferred ${trans}KB, " .
+		    $self->log('info', "migration status: $stat->{status} (transferred ${trans}KB, " .
 			       "remaining ${rem}KB), total ${total}KB)");
 		} else {
-		    $self->log('info', "migration status: $ms");
+		    $self->log('info', "migration status: $stat->{status}");
 		}
 	    }
 
-	    if ($ms eq 'completed') {
+	    if ($stat->{status} eq 'completed') {
 		my $delay = time() - $start;
 		if ($delay > 0) {
 		    my $mbps = sprintf "%.2f", $conf->{memory}/$delay;
@@ -357,16 +359,16 @@ sub phase2 {
 		}
 	    }
 	    
-	    if ($ms eq 'failed' || $ms eq 'cancelled') {
+	    if ($stat->{status} eq 'failed' || $stat->{status} eq 'cancelled') {
 		die "aborting\n"
 	    }
 
-	    last if $ms ne 'active';
+	    last if $stat->{status} ne 'active';
 	} else {
 	    die $merr if $merr;
-	    die "unable to parse migration status '$stat' - aborting\n";
+	    die "unable to parse migration status '$stat->{status}' - aborting\n";
 	}
-	$lstat = $stat;
+	$lstat = $lstat->{ram}->{transferred};
     };
 }
 
-- 
1.7.2.5




More information about the pve-devel mailing list