[libvirt] [PATCH] Various monitor cleanups related to migration.

Chris Lalancette clalance at redhat.com
Wed Sep 30 11:27:20 UTC 2009


The upcoming tunnelled migration needs to be able to set
a migration in progress in the background, as well as
be able to cancel a migration when a problem has happened.
This patch allows for both of these to properly work.

Signed-off-by: Chris Lalancette <clalance at redhat.com>
---
 src/qemu/qemu_monitor_text.c |   26 ++++++++++++++++++++------
 src/qemu/qemu_monitor_text.h |    7 +++++++
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index f57460c..c72f919 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -123,7 +123,7 @@ static char *qemuMonitorEscape(const char *in, int shell)
     return out;
 }
 
-static char *qemuMonitorEscapeArg(const char *in)
+char *qemuMonitorEscapeArg(const char *in)
 {
     return qemuMonitorEscape(in, 0);
 }
@@ -1137,20 +1137,27 @@ cleanup:
 }
 
 
-static int qemuMonitorMigrate(const virDomainObjPtr vm,
-                              const char *dest)
+int qemuMonitorMigrate(const virDomainObjPtr vm,
+                       int background,
+                       const char *dest)
 {
     char *cmd = NULL;
     char *info = NULL;
     int ret = -1;
     char *safedest = qemuMonitorEscapeArg(dest);
+    const char *extra;
 
     if (!safedest) {
         virReportOOMError(NULL);
         return -1;
     }
 
-    if (virAsprintf(&cmd, "migrate \"%s\"", safedest) < 0) {
+    if (background)
+        extra = "-d ";
+    else
+        extra = " ";
+
+    if (virAsprintf(&cmd, "migrate %s\"%s\"", extra, safedest) < 0) {
         virReportOOMError(NULL);
         goto cleanup;
     }
@@ -1200,7 +1207,7 @@ int qemuMonitorMigrateToHost(const virDomainObjPtr vm,
         return -1;
     }
 
-    ret = qemuMonitorMigrate(vm, uri);
+    ret = qemuMonitorMigrate(vm, 0, uri);
 
     VIR_FREE(uri);
 
@@ -1238,7 +1245,7 @@ int qemuMonitorMigrateToCommand(const virDomainObjPtr vm,
         goto cleanup;
     }
 
-    ret = qemuMonitorMigrate(vm, dest);
+    ret = qemuMonitorMigrate(vm, 0, dest);
 
 cleanup:
     VIR_FREE(safe_target);
@@ -1248,6 +1255,13 @@ cleanup:
 }
 
 
+void qemuMonitorMigrateCancel(const virDomainObjPtr vm)
+{
+    char *info = NULL;
+    qemuMonitorCommand(vm, "migrate cancel", &info);
+    VIR_FREE(info);
+}
+
 int qemuMonitorAddUSBDisk(const virDomainObjPtr vm,
                           const char *path)
 {
diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h
index 82dc5df..4283570 100644
--- a/src/qemu/qemu_monitor_text.h
+++ b/src/qemu/qemu_monitor_text.h
@@ -104,6 +104,10 @@ int qemuMonitorMigrateToCommand(const virDomainObjPtr vm,
                                 const char *target);
 
 
+int qemuMonitorMigrate(const virDomainObjPtr vm,
+                       int background,
+                       const char *dest);
+
 /* XXX disk driver type eg,  qcow/etc.
  * XXX cache mode
  */
@@ -170,4 +174,7 @@ int qemuMonitorRemoveHostNetwork(const virDomainObjPtr vm,
                                  int vlan,
                                  const char *netname);
 
+char *qemuMonitorEscapeArg(const char *in);
+void qemuMonitorMigrateCancel(const virDomainObjPtr vm);
+
 #endif /* QEMU_MONITOR_TEXT_H */
-- 
1.6.0.6




More information about the libvir-list mailing list