]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Introduce qemuMigrationDstFinishOffline
authorJiri Denemark <jdenemar@redhat.com>
Tue, 17 May 2022 12:19:12 +0000 (14:19 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Tue, 7 Jun 2022 15:40:20 +0000 (17:40 +0200)
Refactors qemuMigrationDstFinish by moving some parts to a dedicated
function for easier introduction of postcopy resume code without
duplicating common parts of the Finish phase. The goal is to have the
following call graph:

    - qemuMigrationDstFinish
        - qemuMigrationDstFinishOffline
        - qemuMigrationDstFinishActive
            - qemuMigrationDstFinishFresh
            - qemuMigrationDstFinishResume

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
src/qemu/qemu_migration.c

index 41a935e403e99fe7e7206a362b0a0cd0f2eb915a..3eb04f3472846d14f109c8edf8a9b5b692afb6d5 100644 (file)
@@ -5808,6 +5808,32 @@ qemuMigrationDstComplete(virQEMUDriver *driver,
 }
 
 
+static virDomainPtr
+qemuMigrationDstFinishOffline(virQEMUDriver *driver,
+                              virConnectPtr dconn,
+                              virDomainObj *vm,
+                              qemuMigrationCookie *mig,
+                              char **cookieout,
+                              int *cookieoutlen)
+{
+    virDomainPtr dom = NULL;
+
+    if (qemuMigrationDstPersist(driver, vm, mig, false) < 0)
+        return NULL;
+
+    dom = virGetDomain(dconn, vm->def->name, vm->def->uuid, -1);
+
+    if (dom &&
+        qemuMigrationCookieFormat(mig, driver, vm,
+                                  QEMU_MIGRATION_DESTINATION,
+                                  cookieout, cookieoutlen,
+                                  QEMU_MIGRATION_COOKIE_STATS) < 0)
+        VIR_WARN("Unable to encode migration cookie");
+
+    return dom;
+}
+
+
 /*
  * Perform Finish phase of a fresh (i.e., not recovery) migration of an active
  * domain.
@@ -5998,16 +6024,9 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
         goto error;
 
     if (flags & VIR_MIGRATE_OFFLINE) {
-        if (retcode == 0 &&
-            qemuMigrationDstPersist(driver, vm, mig, false) == 0) {
-            dom = virGetDomain(dconn, vm->def->name, vm->def->uuid, -1);
-
-            if (dom &&
-                qemuMigrationCookieFormat(mig, driver, vm,
-                                          QEMU_MIGRATION_DESTINATION,
-                                          cookieout, cookieoutlen,
-                                          QEMU_MIGRATION_COOKIE_STATS) < 0)
-                VIR_WARN("Unable to encode migration cookie");
+        if (retcode == 0) {
+            dom = qemuMigrationDstFinishOffline(driver, dconn, vm, mig,
+                                                cookieout, cookieoutlen);
         }
 
         qemuMigrationJobFinish(vm);