Re: [libvirt] [PATCH v2 12/22] qemu: Do not poll for spice migration status

2015-06-10 Thread Peter Krempa
On Tue, Jun 02, 2015 at 14:34:17 +0200, Jiri Denemark wrote:
 QEMU_CAPS_SEAMLESS_MIGRATION capability says QEMU supports
 SPICE_MIGRATE_COMPLETED event. Thus we can just drop all code which
 polls query-spice and replace it with waiting for the 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 12/22] qemu: Do not poll for spice migration status

2015-06-02 Thread Jiri Denemark
QEMU_CAPS_SEAMLESS_MIGRATION capability says QEMU supports
SPICE_MIGRATE_COMPLETED event. Thus we can just drop all code which
polls query-spice and replace it with waiting for the event.

Signed-off-by: Jiri Denemark jdene...@redhat.com
---

Notes:
Version 2:
- new patch

 src/qemu/qemu_domain.c   |  1 +
 src/qemu/qemu_domain.h   |  1 +
 src/qemu/qemu_migration.c| 38 ++
 src/qemu/qemu_monitor.c  | 10 -
 src/qemu/qemu_monitor.h  |  2 --
 src/qemu/qemu_monitor_json.c | 49 
 src/qemu/qemu_process.c  | 28 +
 tests/qemumonitorjsontest.c  | 40 
 8 files changed, 41 insertions(+), 128 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a1ce988..fe92a17 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -170,6 +170,7 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv)
 job-mask = QEMU_JOB_DEFAULT_MASK;
 job-dump_memory_only = false;
 job-abortJob = false;
+job-spiceMigrated = false;
 VIR_FREE(job-current);
 }
 
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 7479f70..55831a5 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -136,6 +136,7 @@ struct qemuDomainJobObj {
 qemuDomainJobInfoPtr current;   /* async job progress data */
 qemuDomainJobInfoPtr completed; /* statistics data of a recently 
completed job */
 bool abortJob;  /* abort of the job requested */
+bool spiceMigrated; /* spice migration completed */
 };
 
 typedef void (*qemuDomainCleanupCallback)(virQEMUDriverPtr driver,
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 74c2657..84a66d6 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -2375,45 +2375,29 @@ qemuMigrationSetPinAll(virQEMUDriverPtr driver,
 }
 
 static int
-qemuMigrationWaitForSpice(virQEMUDriverPtr driver,
-  virDomainObjPtr vm)
+qemuMigrationWaitForSpice(virDomainObjPtr vm)
 {
 qemuDomainObjPrivatePtr priv = vm-privateData;
 bool wait_for_spice = false;
-bool spice_migrated = false;
 size_t i = 0;
-int rc;
 
-if (virQEMUCapsGet(priv-qemuCaps, QEMU_CAPS_SEAMLESS_MIGRATION)) {
-for (i = 0; i  vm-def-ngraphics; i++) {
-if (vm-def-graphics[i]-type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
-wait_for_spice = true;
-break;
-}
+if (!virQEMUCapsGet(priv-qemuCaps, QEMU_CAPS_SEAMLESS_MIGRATION))
+return 0;
+
+for (i = 0; i  vm-def-ngraphics; i++) {
+if (vm-def-graphics[i]-type == VIR_DOMAIN_GRAPHICS_TYPE_SPICE) {
+wait_for_spice = true;
+break;
 }
 }
 
 if (!wait_for_spice)
 return 0;
 
-while (!spice_migrated) {
-/* Poll every 50ms for progress  to allow cancellation */
-struct timespec ts = { .tv_sec = 0, .tv_nsec = 50 * 1000 * 1000ull };
-
-if (qemuDomainObjEnterMonitorAsync(driver, vm,
-   QEMU_ASYNC_JOB_MIGRATION_OUT)  0)
+while (!priv-job.spiceMigrated  !priv-job.abortJob) {
+if (virDomainObjWait(vm)  0)
 return -1;
-
-rc = qemuMonitorGetSpiceMigrationStatus(priv-mon, spice_migrated);
-if (qemuDomainObjExitMonitor(driver, vm)  0)
-return -1;
-if (rc  0)
-return -1;
-virObjectUnlock(vm);
-nanosleep(ts, NULL);
-virObjectLock(vm);
 }
-
 return 0;
 }
 
@@ -3587,7 +3571,7 @@ qemuMigrationConfirmPhase(virQEMUDriverPtr driver,
 if (retcode == 0) {
 /* If guest uses SPICE and supports seamless migration we have to hold
  * up domain shutdown until SPICE server transfers its data */
-qemuMigrationWaitForSpice(driver, vm);
+qemuMigrationWaitForSpice(vm);
 
 qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_MIGRATED,
 VIR_QEMU_PROCESS_STOP_MIGRATED);
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 15f7852..a2a8f0d 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -2201,16 +2201,6 @@ qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
 
 
 int
-qemuMonitorGetSpiceMigrationStatus(qemuMonitorPtr mon,
-   bool *spice_migrated)
-{
-QEMU_CHECK_MONITOR_JSON(mon);
-
-return qemuMonitorJSONGetSpiceMigrationStatus(mon, spice_migrated);
-}
-
-
-int
 qemuMonitorMigrateToFd(qemuMonitorPtr mon,
unsigned int flags,
int fd)
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 86da7ad..17b7003 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -498,8 +498,6 @@ struct _qemuMonitorMigrationStatus {
 
 int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,