提交 014bb5cf 编写于 作者: C Chris Lalancette

If there is a failure during Qemu offline migrate, make sure to resume the

guest.
Signed-off-by: NChris Lalancette <clalance@redhat.com>
上级 9bceeca8
Fri Feb 27 17:15:00 CET 2009 Chris Lalancette <clalance@redhat.com>
* src/qemu_driver.c: If there is a failure during offline migrate,
make sure to resume the guest.
Fri Feb 27 15:27:31 CET 2009 Daniel Veillard <veillard@redhat.com>
* docs/libvirt-api.xml docs/libvirt-refs.xml
......
......@@ -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);
......@@ -4348,10 +4349,14 @@ qemudDomainMigratePerform (virDomainPtr dom,
if (!(flags & VIR_MIGRATE_LIVE)) {
/* Pause domain for non-live migration */
snprintf(cmd, sizeof cmd, "%s", "stop");
qemudMonitorCommand (vm, cmd, &info);
if (qemudMonitorCommand (vm, "stop", &info) < 0) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("off-line migration specified, but suspend operation failed"));
goto cleanup;
}
DEBUG ("stop reply: %s", info);
VIR_FREE(info);
paused = 1;
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_SUSPENDED,
......@@ -4396,6 +4401,7 @@ qemudDomainMigratePerform (virDomainPtr dom,
/* Clean up the source domain. */
qemudShutdownVMDaemon (dom->conn, driver, vm);
paused = 0;
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_STOPPED,
......@@ -4407,7 +4413,31 @@ qemudDomainMigratePerform (virDomainPtr dom,
ret = 0;
cleanup:
/* Note that we have to free info *first*, since we are re-using the
* variable below (and otherwise might cause a memory leak)
*/
VIR_FREE(info);
if (paused) {
/* we got here through some sort of failure; start the domain again */
if (qemudMonitorCommand (vm, "cont", &info) < 0) {
/* Hm, we already know we are in error here. We don't want to
* overwrite the previous error, though, so we just throw something
* to the logs and hope for the best
*/
qemudLog(QEMUD_ERROR, _("Failed to resume guest %s after failure\n"),
vm->def->name);
}
else {
DEBUG ("cont reply: %s", info);
VIR_FREE(info);
}
event = virDomainEventNewFromObj(vm,
VIR_DOMAIN_EVENT_RESUMED,
VIR_DOMAIN_EVENT_RESUMED_MIGRATED);
}
if (vm)
virDomainObjUnlock(vm);
if (event)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册