All, There was a logic error in the Qemu driver when doing a non-live migrate. During a non-live migrate, on the source host during the Perform step, we pause the domain; however, if there was ever a failure, we were forgetting to unpause the domain, meaning that the domain was paused forever. Add a flag to tell us when we should unpause the domain after a failure. Signed-off-by: Chris Lalancette <clalance@xxxxxxxxxx>
diff --git a/src/qemu_driver.c b/src/qemu_driver.c index a8a2ae7..bcc4690 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -4331,6 +4331,7 @@ qemudDomainMigratePerform (virDomainPtr dom, char cmd[HOST_NAME_MAX+50]; char *info = NULL; int ret = -1; + int paused = 0; qemuDriverLock(driver); vm = virDomainFindByID(&driver->domains, dom->id); @@ -4352,6 +4353,7 @@ qemudDomainMigratePerform (virDomainPtr dom, qemudMonitorCommand (vm, cmd, &info); DEBUG ("stop reply: %s", info); VIR_FREE(info); + paused = 1; event = virDomainEventNewFromObj(vm, VIR_DOMAIN_EVENT_SUSPENDED, @@ -4407,6 +4409,21 @@ qemudDomainMigratePerform (virDomainPtr dom, ret = 0; cleanup: + if (ret != 0 && paused) { + /* we got here through some sort of failure; start the domain again */ + snprintf(cmd, sizeof cmd, "%s", "cont"); + qemudMonitorCommand (vm, cmd, &info); + DEBUG ("cont reply: %s", info); + VIR_FREE(info); + + event = virDomainEventNewFromObj(vm, + VIR_DOMAIN_EVENT_RESUMED, + VIR_DOMAIN_EVENT_RESUMED_MIGRATED); + if (event) + qemuDomainEventQueue(driver, event); + event = NULL; + } + VIR_FREE(info); if (vm) virDomainObjUnlock(vm);
-- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list