Re: [libvirt] [PATCH 08/10] qemu: Remove special case for virDomainMigrateSetMaxDowntime

2011-07-26 Thread Eric Blake

On 07/18/2011 06:27 PM, Jiri Denemark wrote:

Call qemu monitor command directly within a special job that is only
allowed during outgoing migration.
---
  src/qemu/qemu_domain.c|1 -
  src/qemu/qemu_domain.h|6 --
  src/qemu/qemu_driver.c|   23 +++
  src/qemu/qemu_migration.c |   13 -
  4 files changed, 15 insertions(+), 28 deletions(-)


ACK.

--
Eric Blake   ebl...@redhat.com+1-801-349-2682
Libvirt virtualization library http://libvirt.org

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH 08/10] qemu: Remove special case for virDomainMigrateSetMaxDowntime

2011-07-18 Thread Jiri Denemark
Call qemu monitor command directly within a special job that is only
allowed during outgoing migration.
---
 src/qemu/qemu_domain.c|1 -
 src/qemu/qemu_domain.h|6 --
 src/qemu/qemu_driver.c|   23 +++
 src/qemu/qemu_migration.c |   13 -
 4 files changed, 15 insertions(+), 28 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 7748592..4c43e8b 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -186,7 +186,6 @@ qemuDomainObjResetAsyncJob(qemuDomainObjPrivatePtr priv)
 job->start = 0;
 memset(&job->info, 0, sizeof(job->info));
 job->signals = 0;
-memset(&job->signalsData, 0, sizeof(job->signalsData));
 }
 
 void
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index fa4e182..1593257 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -75,11 +75,6 @@ enum qemuDomainAsyncJob {
 enum qemuDomainJobSignals {
 QEMU_JOB_SIGNAL_CANCEL  = 1 << 0, /* Request job cancellation */
 QEMU_JOB_SIGNAL_SUSPEND = 1 << 1, /* Request VM suspend to finish live 
migration offline */
-QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME = 1 << 2, /* Request migration downtime 
change */
-};
-
-struct qemuDomainJobSignalsData {
-unsigned long long migrateDowntime; /* Data for 
QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME */
 };
 
 struct qemuDomainJobObj {
@@ -95,7 +90,6 @@ struct qemuDomainJobObj {
 
 virCond signalCond; /* Use to coordinate the safe queries during migration 
*/
 unsigned int signals;   /* Signals for running job */
-struct qemuDomainJobSignalsData signalsData;/* Signal specific data */
 };
 
 typedef struct _qemuDomainPCIAddressSet qemuDomainPCIAddressSet;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index f0c6489..99fab1a 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7387,19 +7387,23 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom,
 
 qemuDriverLock(driver);
 vm = virDomainFindByUUID(&driver->domains, dom->uuid);
+qemuDriverUnlock(driver);
 
 if (!vm) {
 char uuidstr[VIR_UUID_STRING_BUFLEN];
 virUUIDFormat(dom->uuid, uuidstr);
 qemuReportError(VIR_ERR_NO_DOMAIN,
 _("no domain with matching uuid '%s'"), uuidstr);
-goto cleanup;
+return -1;
 }
 
+if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MIGRATION_OP) < 0)
+goto cleanup;
+
 if (!virDomainObjIsActive(vm)) {
 qemuReportError(VIR_ERR_OPERATION_INVALID,
 "%s", _("domain is not running"));
-goto cleanup;
+goto endjob;
 }
 
 priv = vm->privateData;
@@ -7407,18 +7411,21 @@ qemuDomainMigrateSetMaxDowntime(virDomainPtr dom,
 if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) {
 qemuReportError(VIR_ERR_OPERATION_INVALID,
 "%s", _("domain is not being migrated"));
-goto cleanup;
+goto endjob;
 }
 
-VIR_DEBUG("Requesting migration downtime change to %llums", downtime);
-priv->job.signalsData.migrateDowntime = downtime;
-priv->job.signals |= QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME;
-ret = 0;
+VIR_DEBUG("Setting migration downtime to %llums", downtime);
+ignore_value(qemuDomainObjEnterMonitor(driver, vm));
+ret = qemuMonitorSetMigrationDowntime(priv->mon, downtime);
+qemuDomainObjExitMonitor(driver, vm);
+
+endjob:
+if (qemuDomainObjEndJob(driver, vm) == 0)
+vm = NULL;
 
 cleanup:
 if (vm)
 virDomainObjUnlock(vm);
-qemuDriverUnlock(driver);
 return ret;
 }
 
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 7c5583b..dbf0412 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -775,19 +775,6 @@ qemuMigrationProcessJobSignals(struct qemud_driver *driver,
 VIR_DEBUG("Pausing domain for non-live migration");
 if (qemuMigrationSetOffline(driver, vm) < 0)
 VIR_WARN("Unable to pause domain");
-} else if (priv->job.signals & QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME) {
-unsigned long long ms = priv->job.signalsData.migrateDowntime;
-
-priv->job.signals ^= QEMU_JOB_SIGNAL_MIGRATE_DOWNTIME;
-priv->job.signalsData.migrateDowntime = 0;
-VIR_DEBUG("Setting migration downtime to %llums", ms);
-ret = qemuDomainObjEnterMonitorWithDriver(driver, vm);
-if (ret == 0) {
-ret = qemuMonitorSetMigrationDowntime(priv->mon, ms);
-qemuDomainObjExitMonitorWithDriver(driver, vm);
-}
-if (ret < 0)
-VIR_WARN("Unable to set migration downtime");
 } else {
 ret = 0;
 }
-- 
1.7.6

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list