[libvirt] [PATCH]: Fix non-live migration failure case

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]