[libvirt PATCH 70/80] qemu: Create completed jobData in qemuMigrationSrcComplete

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Normally the structure is created once the source reports completed
migration, but with post-copy migration we can get here even after
libvirt daemon was restarted. It doesn't make sense to preserve the
structure in our status XML as we're going to rewrite almost all of it
while refreshing the stats anyway. So we just create the structure here
if it doesn't exist to make sure we can properly report statistics of a
completed migration.

Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx>
---
 src/qemu/qemu_migration.c | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 430dfb1abb..1fc978bad5 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -3947,22 +3947,26 @@ qemuMigrationSrcComplete(virQEMUDriver *driver,
     virObjectEvent *event;
     int reason;
 
-    if (jobData) {
-        /* We need to refresh migration statistics after a completed post-copy
-         * migration since jobData contains obsolete data from the time we
-         * switched to post-copy mode.
-         */
-        if (virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
-            reason == VIR_DOMAIN_PAUSED_POSTCOPY) {
-            VIR_DEBUG("Refreshing migration statistics");
-            if (qemuMigrationAnyFetchStats(driver, vm, VIR_ASYNC_JOB_MIGRATION_OUT,
-                                           jobData, NULL) < 0)
-                VIR_WARN("Could not refresh migration statistics");
-        }
+    if (!jobData) {
+        priv->job.completed = virDomainJobDataCopy(priv->job.current);
+        jobData = priv->job.completed;
+        jobData->status = VIR_DOMAIN_JOB_STATUS_COMPLETED;
+    }
 
-        qemuDomainJobDataUpdateTime(jobData);
+    /* We need to refresh migration statistics after a completed post-copy
+     * migration since jobData contains obsolete data from the time we
+     * switched to post-copy mode.
+     */
+    if (virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
+        reason == VIR_DOMAIN_PAUSED_POSTCOPY) {
+        VIR_DEBUG("Refreshing migration statistics");
+        if (qemuMigrationAnyFetchStats(driver, vm, VIR_ASYNC_JOB_MIGRATION_OUT,
+                                       jobData, NULL) < 0)
+            VIR_WARN("Could not refresh migration statistics");
     }
 
+    qemuDomainJobDataUpdateTime(jobData);
+
     /* If guest uses SPICE and supports seamless migration we have to hold
      * up domain shutdown until SPICE server transfers its data */
     qemuMigrationSrcWaitForSpice(vm);
-- 
2.35.1




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux