Re: [libvirt] [PATCH v2 18/22] qemu: Update migration state according to MIGRATION event

2015-06-10 Thread Peter Krempa
On Tue, Jun 02, 2015 at 14:34:23 +0200, Jiri Denemark wrote:
 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
 ---

ACK,

Peter


signature.asc
Description: Digital signature
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v2 18/22] qemu: Update migration state according to MIGRATION event

2015-06-02 Thread Jiri Denemark
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