From 684d747a6c5ea03dc05e6324ff8cba42b5873a15 Mon Sep 17 00:00:00 2001 Message-Id: <684d747a6c5ea03dc05e6324ff8cba42b5873a15@dist-git> From: Jiri Denemark Date: Thu, 11 Jan 2018 20:47:50 +0100 Subject: [PATCH] qemu: Fix type of a completed job Libvirt 3.7.0 and earlier libvirt reported a migration job as completed immediately after QEMU finished sending migration data at which point migration was not really complete yet. Commit v3.7.0-29-g3f2d6d829e fixed this, but caused a regression in reporting statistics for completed jobs which started reporting the job as still running. This happened because the completed job statistics including the job status are copied from the running job before we finally mark it as completed. Let's make sure QEMU_DOMAIN_JOB_STATUS_COMPLETED is always set in the completed job info even when the job has not finished yet. https://bugzilla.redhat.com/show_bug.cgi?id=1523036 Signed-off-by: Jiri Denemark Reviewed-by: Pavel Hrdina (cherry picked from commit e8784e7868d44a2ce796b376cf78f0f6c61c114a) https://bugzilla.redhat.com/show_bug.cgi?id=1530130 Signed-off-by: Jiri Denemark --- src/qemu/qemu_migration.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index aabd0913ad..120b79415e 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1590,8 +1590,10 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr driver, qemuDomainJobInfoUpdateDowntime(jobInfo); VIR_FREE(priv->job.completed); - if (VIR_ALLOC(priv->job.completed) == 0) + if (VIR_ALLOC(priv->job.completed) == 0) { *priv->job.completed = *jobInfo; + priv->job.completed->status = QEMU_DOMAIN_JOB_STATUS_COMPLETED; + } if (asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT && jobInfo->status == QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED) @@ -5370,8 +5372,9 @@ qemuMigrationFinish(virQEMUDriverPtr driver, } if (dom) { - priv->job.completed = jobInfo; - jobInfo = NULL; + VIR_STEAL_PTR(priv->job.completed, jobInfo); + priv->job.completed->status = QEMU_DOMAIN_JOB_STATUS_COMPLETED; + if (qemuMigrationBakeCookie(mig, driver, vm, cookieout, cookieoutlen, QEMU_MIGRATION_COOKIE_STATS) < 0) VIR_WARN("Unable to encode migration cookie"); -- 2.15.1