]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Store completed stats at the very end of migration
authorJiri Denemark <jdenemar@redhat.com>
Thu, 18 Feb 2016 13:02:15 +0000 (14:02 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Tue, 8 Mar 2016 15:25:47 +0000 (16:25 +0100)
Statistics for a completed migration only make sense if the migration
was successful. Let's not store them in priv->job.completed until we
are sure it was a success.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
src/qemu/qemu_migration.c

index 64cbffa59ae07c423660621c8528a39bd599ce5a..ec96ecbb6b1d5c4aeef2ab707fa1c3307725baf7 100644 (file)
@@ -5718,6 +5718,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
     unsigned long long timeReceived = 0;
     virObjectEventPtr event;
     int rc;
+    qemuDomainJobInfoPtr jobInfo = NULL;
 
     VIR_DEBUG("driver=%p, dconn=%p, vm=%p, cookiein=%s, cookieinlen=%d, "
               "cookieout=%p, cookieoutlen=%p, flags=%lx, retcode=%d",
@@ -5861,8 +5862,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
     }
 
     if (mig->jobInfo) {
-        qemuDomainJobInfoPtr jobInfo = mig->jobInfo;
-        priv->job.completed = jobInfo;
+        jobInfo = mig->jobInfo;
         mig->jobInfo = NULL;
 
         if (jobInfo->sent && timeReceived) {
@@ -5870,8 +5870,8 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
             jobInfo->received = timeReceived;
             jobInfo->timeDeltaSet = true;
         }
-        qemuDomainJobInfoUpdateTime(priv->job.completed);
-        qemuDomainJobInfoUpdateDowntime(priv->job.completed);
+        qemuDomainJobInfoUpdateTime(jobInfo);
+        qemuDomainJobInfoUpdateDowntime(jobInfo);
     }
 
     dom = virGetDomain(dconn, vm->def->name, vm->def->uuid);
@@ -5910,16 +5910,20 @@ qemuMigrationFinish(virQEMUDriverPtr driver,
         qemuDomainEventQueue(driver, event);
     }
 
-    if (dom &&
-        qemuMigrationBakeCookie(mig, driver, vm, cookieout, cookieoutlen,
-                                QEMU_MIGRATION_COOKIE_STATS) < 0)
-        VIR_WARN("Unable to encode migration cookie");
+    if (dom) {
+        priv->job.completed = jobInfo;
+        jobInfo = NULL;
+        if (qemuMigrationBakeCookie(mig, driver, vm, cookieout, cookieoutlen,
+                                    QEMU_MIGRATION_COOKIE_STATS) < 0)
+            VIR_WARN("Unable to encode migration cookie");
+    }
 
     qemuMigrationJobFinish(driver, vm);
     if (!virDomainObjIsActive(vm))
         qemuDomainRemoveInactive(driver, vm);
 
  cleanup:
+    VIR_FREE(jobInfo);
     virPortAllocatorRelease(driver->migrationPorts, port);
     if (priv->mon)
         qemuMonitorSetDomainLog(priv->mon, NULL, NULL, NULL);