We don't need to call query-migrate every 50ms when we get the current
migration state via MIGRATION event.
Signed-off-by: Jiri Denemark jdene...@redhat.com
---
Notes:
Version 2:
- new patch
src/qemu/qemu_migration.c | 14 --
src/qemu/qemu_process.c | 31 +++
2 files changed, 43 insertions(+), 2 deletions(-)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index b79bbd1..f27f1ca 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -2496,7 +2496,11 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver,
qemuDomainObjPrivatePtr priv = vm-privateData;
qemuDomainJobInfoPtr jobInfo = priv-job.current;
-if (qemuMigrationUpdateJobStatus(driver, vm, asyncJob) 0)
+bool events = virQEMUCapsGet(priv-qemuCaps, QEMU_CAPS_MIGRATION_EVENT);
+
+if (events)
+qemuMigrationUpdateJobType(jobInfo);
+else if (qemuMigrationUpdateJobStatus(driver, vm, asyncJob) 0)
return -1;
switch (jobInfo-type) {
@@ -2515,9 +2519,15 @@ qemuMigrationCheckJobStatus(virQEMUDriverPtr driver,
qemuMigrationJobName(vm), _(canceled by client));
return -1;
+case VIR_DOMAIN_JOB_COMPLETED:
+/* Fetch statistics of a completed migration */
+if (events
+qemuMigrationUpdateJobStatus(driver, vm, asyncJob) 0)
+return -1;
+break;
+
case VIR_DOMAIN_JOB_BOUNDED:
case VIR_DOMAIN_JOB_UNBOUNDED:
-case VIR_DOMAIN_JOB_COMPLETED:
case VIR_DOMAIN_JOB_LAST:
break;
}
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 6d1ed28..0427e5d 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -1508,6 +1508,36 @@ qemuProcessHandleSpiceMigrated(qemuMonitorPtr mon
ATTRIBUTE_UNUSED,
}
+static int
+qemuProcessHandleMigrationStatus(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
+ virDomainObjPtr vm,
+ int status,
+ void *opaque ATTRIBUTE_UNUSED)
+{
+qemuDomainObjPrivatePtr priv;
+
+virObjectLock(vm);
+
+VIR_DEBUG(Migration of domain %p %s changed state to %s,
+ vm, vm-def-name,
+ qemuMonitorMigrationStatusTypeToString(status));
+
+priv = vm-privateData;
+if (priv-job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT
+priv-job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_IN) {
+VIR_DEBUG(got MIGRATION event without a migration job);
+goto cleanup;
+}
+
+priv-job.current-status.status = status;
+virDomainObjSignal(vm);
+
+ cleanup:
+virObjectUnlock(vm);
+return 0;
+}
+
+
static qemuMonitorCallbacks monitorCallbacks = {
.eofNotify = qemuProcessHandleMonitorEOF,
.errorNotify = qemuProcessHandleMonitorError,
@@ -1532,6 +1562,7 @@ static qemuMonitorCallbacks monitorCallbacks = {
.domainNicRxFilterChanged = qemuProcessHandleNicRxFilterChanged,
.domainSerialChange = qemuProcessHandleSerialChanged,
.domainSpiceMigrated = qemuProcessHandleSpiceMigrated,
+.domainMigrationStatus = qemuProcessHandleMigrationStatus,
};
static int
--
2.4.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list