|
|
23265d |
From 547c0e17e665d7a1051d8670b2f9e44783dbaf58 Mon Sep 17 00:00:00 2001
|
|
|
23265d |
Message-Id: <547c0e17e665d7a1051d8670b2f9e44783dbaf58@dist-git>
|
|
|
23265d |
From: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
|
|
|
23265d |
Date: Fri, 1 Sep 2017 09:49:31 +0300
|
|
|
23265d |
Subject: [PATCH] qemu: migration: don't expose incomplete job as complete
|
|
|
23265d |
|
|
|
23265d |
In case of real migration (not migrating to file on save, dump etc)
|
|
|
23265d |
migration info is not complete at time qemu finishes migration
|
|
|
23265d |
in normal (non postcopy) mode. We need to update disks stats,
|
|
|
23265d |
downtime info etc. Thus let's not expose this job status as
|
|
|
23265d |
completed.
|
|
|
23265d |
|
|
|
23265d |
To archive this let's set status to 'qemu completed' after
|
|
|
23265d |
qemu reports migration is finished. It is not visible as complete
|
|
|
23265d |
job to clients. Cookie code on confirm phase will finally turn
|
|
|
23265d |
job into completed. As we don't need more things to do when
|
|
|
23265d |
migrating to file status is set to 'completed' as before
|
|
|
23265d |
in this case.
|
|
|
23265d |
|
|
|
23265d |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
23265d |
(cherry picked from commit 3f2d6d829eb8de0348fcbd58d654b29d5c5bebc2)
|
|
|
23265d |
|
|
|
23265d |
https://bugzilla.redhat.com/show_bug.cgi?id=1530130
|
|
|
23265d |
|
|
|
23265d |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
23265d |
---
|
|
|
23265d |
src/qemu/qemu_domain.c | 1 +
|
|
|
23265d |
src/qemu/qemu_domain.h | 1 +
|
|
|
23265d |
src/qemu/qemu_driver.c | 1 +
|
|
|
23265d |
src/qemu/qemu_migration.c | 13 +++++++++----
|
|
|
23265d |
4 files changed, 12 insertions(+), 4 deletions(-)
|
|
|
23265d |
|
|
|
23265d |
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
|
|
|
23265d |
index e81d682c00..9a80e409b9 100644
|
|
|
23265d |
--- a/src/qemu/qemu_domain.c
|
|
|
23265d |
+++ b/src/qemu/qemu_domain.c
|
|
|
23265d |
@@ -398,6 +398,7 @@ qemuDomainJobStatusToType(qemuDomainJobStatus status)
|
|
|
23265d |
|
|
|
23265d |
case QEMU_DOMAIN_JOB_STATUS_ACTIVE:
|
|
|
23265d |
case QEMU_DOMAIN_JOB_STATUS_MIGRATING:
|
|
|
23265d |
+ case QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED:
|
|
|
23265d |
case QEMU_DOMAIN_JOB_STATUS_POSTCOPY:
|
|
|
23265d |
return VIR_DOMAIN_JOB_UNBOUNDED;
|
|
|
23265d |
|
|
|
23265d |
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
|
|
|
23265d |
index 0cf54d99ae..cc458e1224 100644
|
|
|
23265d |
--- a/src/qemu/qemu_domain.h
|
|
|
23265d |
+++ b/src/qemu/qemu_domain.h
|
|
|
23265d |
@@ -103,6 +103,7 @@ typedef enum {
|
|
|
23265d |
QEMU_DOMAIN_JOB_STATUS_NONE = 0,
|
|
|
23265d |
QEMU_DOMAIN_JOB_STATUS_ACTIVE,
|
|
|
23265d |
QEMU_DOMAIN_JOB_STATUS_MIGRATING,
|
|
|
23265d |
+ QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED,
|
|
|
23265d |
QEMU_DOMAIN_JOB_STATUS_POSTCOPY,
|
|
|
23265d |
QEMU_DOMAIN_JOB_STATUS_COMPLETED,
|
|
|
23265d |
QEMU_DOMAIN_JOB_STATUS_FAILED,
|
|
|
23265d |
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
|
|
23265d |
index 931f3d344d..d2dd704868 100644
|
|
|
23265d |
--- a/src/qemu/qemu_driver.c
|
|
|
23265d |
+++ b/src/qemu/qemu_driver.c
|
|
|
23265d |
@@ -12972,6 +12972,7 @@ qemuDomainGetJobStatsInternal(virQEMUDriverPtr driver,
|
|
|
23265d |
|
|
|
23265d |
if (jobInfo->status == QEMU_DOMAIN_JOB_STATUS_ACTIVE ||
|
|
|
23265d |
jobInfo->status == QEMU_DOMAIN_JOB_STATUS_MIGRATING ||
|
|
|
23265d |
+ jobInfo->status == QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED ||
|
|
|
23265d |
jobInfo->status == QEMU_DOMAIN_JOB_STATUS_POSTCOPY) {
|
|
|
23265d |
if (fetch)
|
|
|
23265d |
ret = qemuMigrationFetchJobStatus(driver, vm, QEMU_ASYNC_JOB_NONE,
|
|
|
23265d |
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
|
|
|
23265d |
index c8cd7ebfa3..aabd0913ad 100644
|
|
|
23265d |
--- a/src/qemu/qemu_migration.c
|
|
|
23265d |
+++ b/src/qemu/qemu_migration.c
|
|
|
23265d |
@@ -1338,7 +1338,7 @@ qemuMigrationUpdateJobType(qemuDomainJobInfoPtr jobInfo)
|
|
|
23265d |
break;
|
|
|
23265d |
|
|
|
23265d |
case QEMU_MONITOR_MIGRATION_STATUS_COMPLETED:
|
|
|
23265d |
- jobInfo->status = QEMU_DOMAIN_JOB_STATUS_COMPLETED;
|
|
|
23265d |
+ jobInfo->status = QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED;
|
|
|
23265d |
break;
|
|
|
23265d |
|
|
|
23265d |
case QEMU_MONITOR_MIGRATION_STATUS_INACTIVE:
|
|
|
23265d |
@@ -1461,6 +1461,7 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver,
|
|
|
23265d |
|
|
|
23265d |
case QEMU_DOMAIN_JOB_STATUS_ACTIVE:
|
|
|
23265d |
case QEMU_DOMAIN_JOB_STATUS_MIGRATING:
|
|
|
23265d |
+ case QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED:
|
|
|
23265d |
case QEMU_DOMAIN_JOB_STATUS_POSTCOPY:
|
|
|
23265d |
break;
|
|
|
23265d |
}
|
|
|
23265d |
@@ -1527,19 +1528,19 @@ qemuMigrationCompleted(virQEMUDriverPtr driver,
|
|
|
23265d |
return 1;
|
|
|
23265d |
}
|
|
|
23265d |
|
|
|
23265d |
- if (jobInfo->status == QEMU_DOMAIN_JOB_STATUS_COMPLETED)
|
|
|
23265d |
+ if (jobInfo->status == QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED)
|
|
|
23265d |
return 1;
|
|
|
23265d |
else
|
|
|
23265d |
return 0;
|
|
|
23265d |
|
|
|
23265d |
error:
|
|
|
23265d |
- /* state can not be active at this point */
|
|
|
23265d |
+ /* state can not be active or completed at this point */
|
|
|
23265d |
if (jobInfo->status == QEMU_DOMAIN_JOB_STATUS_MIGRATING ||
|
|
|
23265d |
jobInfo->status == QEMU_DOMAIN_JOB_STATUS_POSTCOPY) {
|
|
|
23265d |
/* The migration was aborted by us rather than QEMU itself. */
|
|
|
23265d |
jobInfo->status = QEMU_DOMAIN_JOB_STATUS_FAILED;
|
|
|
23265d |
return -2;
|
|
|
23265d |
- } else if (jobInfo->status == QEMU_DOMAIN_JOB_STATUS_COMPLETED) {
|
|
|
23265d |
+ } else if (jobInfo->status == QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED) {
|
|
|
23265d |
jobInfo->status = QEMU_DOMAIN_JOB_STATUS_FAILED;
|
|
|
23265d |
return -1;
|
|
|
23265d |
} else {
|
|
|
23265d |
@@ -1592,6 +1593,10 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr driver,
|
|
|
23265d |
if (VIR_ALLOC(priv->job.completed) == 0)
|
|
|
23265d |
*priv->job.completed = *jobInfo;
|
|
|
23265d |
|
|
|
23265d |
+ if (asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT &&
|
|
|
23265d |
+ jobInfo->status == QEMU_DOMAIN_JOB_STATUS_QEMU_COMPLETED)
|
|
|
23265d |
+ jobInfo->status = QEMU_DOMAIN_JOB_STATUS_COMPLETED;
|
|
|
23265d |
+
|
|
|
23265d |
return 0;
|
|
|
23265d |
}
|
|
|
23265d |
|
|
|
23265d |
--
|
|
|
23265d |
2.15.1
|
|
|
23265d |
|