[libvirt] [RFC PATCHv2 2/3] qemu: support migration to fd

Eric Blake eblake at redhat.com
Wed Mar 2 22:07:05 UTC 2011


* src/qemu/qemu_monitor.h (qemuMonitorMigrateToFd): New
prototype.
* src/qemu/qemu_monitor_text.h (qemuMonitorTextMigrateToFd):
Likewise.
* src/qemu/qemu_monitor_json.h (qemuMonitorJSONMigrateToFd):
Likewise.
* src/qemu/qemu_monitor.c (qemuMonitorMigrateToFd): New function.
* src/qemu/qemu_monitor_text.c (qemuMonitorTextMigrateToFd):
Likewise.
* src/qemu/qemu_monitor_json.c (qemuMonitorJSONMigrateToFd):
Likewise.
---

v2: new patch

 src/qemu/qemu_monitor.c      |   22 ++++++++++++++++++++++
 src/qemu/qemu_monitor.h      |    4 ++++
 src/qemu/qemu_monitor_json.c |   21 ++++++++++++++++++++-
 src/qemu/qemu_monitor_json.h |    6 +++++-
 src/qemu/qemu_monitor_text.c |   24 ++++++++++++++++++++++--
 src/qemu/qemu_monitor_text.h |    6 +++++-
 6 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index dfb1aad..312e797 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -1384,6 +1384,28 @@ int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
 }


+int qemuMonitorMigrateToFd(qemuMonitorPtr mon,
+                           unsigned int flags,
+                           int fd)
+{
+    int ret;
+    VIR_DEBUG("mon=%p fd=%d flags=%u",
+          mon, fd, flags);
+
+    if (!mon) {
+        qemuReportError(VIR_ERR_INVALID_ARG, "%s",
+                        _("monitor must not be NULL"));
+        return -1;
+    }
+
+    if (mon->json)
+        ret = qemuMonitorJSONMigrateToFd(mon, flags, fd);
+    else
+        ret = qemuMonitorTextMigrateToFd(mon, flags, fd);
+    return ret;
+}
+
+
 int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
                              unsigned int flags,
                              const char *hostname,
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 0ea1330..1a64ac0 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -260,6 +260,10 @@ typedef enum {
   QEMU_MONITOR_MIGRATION_FLAGS_LAST
 } QEMU_MONITOR_MIGRATE;

+int qemuMonitorMigrateToFd(qemuMonitorPtr mon,
+                           unsigned int flags,
+                           int fd);
+
 int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
                              unsigned int flags,
                              const char *hostname,
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index e6903a1..81201ff 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -1,7 +1,7 @@
 /*
  * qemu_monitor_json.c: interaction with QEMU monitor console
  *
- * Copyright (C) 2006-2010 Red Hat, Inc.
+ * Copyright (C) 2006-2011 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -1697,6 +1697,25 @@ static int qemuMonitorJSONMigrate(qemuMonitorPtr mon,
 }


+int qemuMonitorJSONMigrateToFd(qemuMonitorPtr mon,
+                               unsigned int flags,
+                               int fd)
+{
+    int ret;
+
+    if (qemuMonitorJSONSendFileHandle(mon, "migrate", fd) < 0)
+        return -1;
+
+    ret = qemuMonitorJSONMigrate(mon, flags, "fd:migrate");
+
+    if (ret < 0) {
+        if (qemuMonitorJSONCloseFileHandle(mon, "migrate") < 0)
+            VIR_WARN0("failed to close migration handle");
+    }
+
+    return ret;
+}
+
 int qemuMonitorJSONMigrateToHost(qemuMonitorPtr mon,
                                  unsigned int flags,
                                  const char *hostname,
diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h
index 4ae472a..c2b45f3 100644
--- a/src/qemu/qemu_monitor_json.h
+++ b/src/qemu/qemu_monitor_json.h
@@ -1,7 +1,7 @@
 /*
  * qemu_monitor_json.h: interaction with QEMU monitor console
  *
- * Copyright (C) 2006-2009 Red Hat, Inc.
+ * Copyright (C) 2006-2009, 2011 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -104,6 +104,10 @@ int qemuMonitorJSONGetMigrationStatus(qemuMonitorPtr mon,
                                       unsigned long long *remaining,
                                       unsigned long long *total);

+int qemuMonitorJSONMigrateToFd(qemuMonitorPtr mon,
+                               unsigned int flags,
+                               int fd);
+
 int qemuMonitorJSONMigrateToHost(qemuMonitorPtr mon,
                                  unsigned int flags,
                                  const char *hostname,
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index 0aed690..76e0ec0 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -1,7 +1,7 @@
 /*
  * qemu_monitor_text.c: interaction with QEMU monitor console
  *
- * Copyright (C) 2006-2010 Red Hat, Inc.
+ * Copyright (C) 2006-2011 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -1256,7 +1256,8 @@ static int qemuMonitorTextMigrate(qemuMonitorPtr mon,
      * unknown command: migrate" */
     if (strstr(info, "unknown command:")) {
         qemuReportError(VIR_ERR_NO_SUPPORT,
-                        _("migration to '%s' not supported by this qemu: %s"), dest, info);
+                        _("migration to '%s' not supported by this qemu: %s"),
+                        dest, info);
         goto cleanup;
     }

@@ -1271,6 +1272,25 @@ cleanup:
     return ret;
 }

+int qemuMonitorTextMigrateToFd(qemuMonitorPtr mon,
+                               unsigned int flags,
+                               int fd)
+{
+    int ret;
+
+    if (qemuMonitorTextSendFileHandle(mon, "migrate", fd) < 0)
+        return -1;
+
+    ret = qemuMonitorTextMigrate(mon, flags, "fd:migrate");
+
+    if (ret < 0) {
+        if (qemuMonitorTextCloseFileHandle(mon, "migrate") < 0)
+            VIR_WARN0("failed to close migration handle");
+    }
+
+    return ret;
+}
+
 int qemuMonitorTextMigrateToHost(qemuMonitorPtr mon,
                                  unsigned int flags,
                                  const char *hostname,
diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h
index b29dbcc..f1b53fc 100644
--- a/src/qemu/qemu_monitor_text.h
+++ b/src/qemu/qemu_monitor_text.h
@@ -1,7 +1,7 @@
 /*
  * qemu_monitor_text.h: interaction with QEMU monitor console
  *
- * Copyright (C) 2006-2009 Red Hat, Inc.
+ * Copyright (C) 2006-2009, 2011 Red Hat, Inc.
  * Copyright (C) 2006 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -102,6 +102,10 @@ int qemuMonitorTextGetMigrationStatus(qemuMonitorPtr mon,
                                       unsigned long long *remaining,
                                       unsigned long long *total);

+int qemuMonitorTextMigrateToFd(qemuMonitorPtr mon,
+                               unsigned int flags,
+                               int fd);
+
 int qemuMonitorTextMigrateToHost(qemuMonitorPtr mon,
                                  unsigned int flags,
                                  const char *hostname,
-- 
1.7.4




More information about the libvir-list mailing list