[libvirt PATCH 44/80] qemu: Introduce qemuMigrationSrcBeginXML helper

Jiri Denemark jdenemar at redhat.com
Tue May 10 15:21:05 UTC 2022


Turn the final part of Begin phase formatting a domain XML for migration
into a reusable helper.

Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
---
 src/qemu/qemu_migration.c | 95 ++++++++++++++++++++++++---------------
 1 file changed, 58 insertions(+), 37 deletions(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 180a760bca..7299bb6a0b 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -2487,6 +2487,60 @@ qemuMigrationAnyRefreshStatus(virQEMUDriver *driver,
 }
 
 
+static char *
+qemuMigrationSrcBeginXML(virQEMUDriver *driver,
+                         virDomainObj *vm,
+                         const char *xmlin,
+                         char **cookieout,
+                         int *cookieoutlen,
+                         unsigned int cookieFlags,
+                         const char **migrate_disks,
+                         size_t nmigrate_disks,
+                         unsigned long flags)
+{
+    qemuDomainObjPrivate *priv = vm->privateData;
+    g_autoptr(qemuMigrationCookie) mig = NULL;
+
+    if (priv->origCPU)
+        cookieFlags |= QEMU_MIGRATION_COOKIE_CPU;
+
+    if (!(flags & VIR_MIGRATE_OFFLINE))
+        cookieFlags |= QEMU_MIGRATION_COOKIE_CAPS;
+
+    if (!(mig = qemuMigrationCookieNew(vm->def, priv->origname)))
+        return NULL;
+
+    if (cookieFlags & QEMU_MIGRATION_COOKIE_NBD &&
+        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING) &&
+        qemuMigrationSrcBeginPhaseBlockDirtyBitmaps(mig, vm, migrate_disks,
+                                                    nmigrate_disks) < 0)
+        return NULL;
+
+    if (qemuMigrationCookieFormat(mig, driver, vm,
+                                  QEMU_MIGRATION_SOURCE,
+                                  cookieout, cookieoutlen,
+                                  cookieFlags) < 0)
+        return NULL;
+
+    if (xmlin) {
+        g_autoptr(virDomainDef) def = NULL;
+
+        if (!(def = virDomainDefParseString(xmlin, driver->xmlopt, priv->qemuCaps,
+                                            VIR_DOMAIN_DEF_PARSE_INACTIVE |
+                                            VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
+            return NULL;
+
+        if (!qemuDomainCheckABIStability(driver, vm, def))
+            return NULL;
+
+        return qemuDomainDefFormatLive(driver, priv->qemuCaps, def, NULL, false, true);
+    }
+
+    return qemuDomainDefFormatLive(driver, priv->qemuCaps, vm->def, priv->origCPU,
+                                   false, true);
+}
+
+
 /* The caller is supposed to lock the vm and start a migration job. */
 static char *
 qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
@@ -2499,8 +2553,6 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
                            const char **migrate_disks,
                            unsigned long flags)
 {
-    g_autoptr(qemuMigrationCookie) mig = NULL;
-    g_autoptr(virDomainDef) def = NULL;
     qemuDomainObjPrivate *priv = vm->privateData;
     unsigned int cookieFlags = QEMU_MIGRATION_COOKIE_LOCKSTATE;
 
@@ -2621,41 +2673,10 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
          vm->newDef && !qemuDomainVcpuHotplugIsInOrder(vm->newDef)))
         cookieFlags |= QEMU_MIGRATION_COOKIE_CPU_HOTPLUG;
 
-    if (priv->origCPU)
-        cookieFlags |= QEMU_MIGRATION_COOKIE_CPU;
-
-    if (!(flags & VIR_MIGRATE_OFFLINE))
-        cookieFlags |= QEMU_MIGRATION_COOKIE_CAPS;
-
-    if (!(mig = qemuMigrationCookieNew(vm->def, priv->origname)))
-        return NULL;
-
-    if (cookieFlags & QEMU_MIGRATION_COOKIE_NBD &&
-        virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_PARAM_BLOCK_BITMAP_MAPPING) &&
-        qemuMigrationSrcBeginPhaseBlockDirtyBitmaps(mig, vm, migrate_disks,
-                                                    nmigrate_disks) < 0)
-        return NULL;
-
-    if (qemuMigrationCookieFormat(mig, driver, vm,
-                                  QEMU_MIGRATION_SOURCE,
-                                  cookieout, cookieoutlen,
-                                  cookieFlags) < 0)
-        return NULL;
-
-    if (xmlin) {
-        if (!(def = virDomainDefParseString(xmlin, driver->xmlopt, priv->qemuCaps,
-                                            VIR_DOMAIN_DEF_PARSE_INACTIVE |
-                                            VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
-            return NULL;
-
-        if (!qemuDomainCheckABIStability(driver, vm, def))
-            return NULL;
-
-        return qemuDomainDefFormatLive(driver, priv->qemuCaps, def, NULL, false, true);
-    } else {
-        return qemuDomainDefFormatLive(driver, priv->qemuCaps, vm->def, priv->origCPU,
-                                       false, true);
-    }
+    return qemuMigrationSrcBeginXML(driver, vm, xmlin,
+                                    cookieout, cookieoutlen, cookieFlags,
+                                    migrate_disks, nmigrate_disks,
+                                    flags);
 }
 
 char *
-- 
2.35.1



More information about the libvir-list mailing list