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 <[email protected]>
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
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list