]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Remove special case for virDomainMigrateSetMaxDowntime
authorJiri Denemark <jdenemar@redhat.com>
Tue, 19 Jul 2011 00:27:37 +0000 (02:27 +0200)
committerEric Blake <eblake@redhat.com>
Wed, 27 Jul 2011 14:45:16 +0000 (08:45 -0600)
Call qemu monitor command directly within a special job that is only
allowed during outgoing migration.

src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_driver.c
src/qemu/qemu_migration.c

index 030439a3e0c2e7e13294f904dd1a793585087924..d17b35d3cc8584770e74a0780dbab2e4d9a1228e 100644 (file)
@@ -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
index fa4e182983090eb7a73ebb2c0fdfb2b249185b10..1593257811914412ffa360faaf564c284bc4878f 100644 (file)
@@ -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;
index f2054230334c584db4fd0e15baf5808a2fd06f10..36453d392b9673f2bcd805b976ef55dc766efc0b 100644 (file)
@@ -7989,18 +7989,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;
 }
 
@@ -8018,19 +8021,23 @@ qemuDomainMigrateSetMaxSpeed(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;
index 9fe4a0752d9b076bd2d7f8d905235e47dd411f5d..6cef83705bc63d890e5a78876e8700592f45e60c 100644 (file)
@@ -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;
     }