1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

retrieve paused/running state at migration start

This patch fixes the bug where paused/running state is not
transmitted during migration.  As a result, in the QEMU driver
for example the machine was always started on the destination
end.

In order to do so, just read the state and if it is appropriate and
set the VIR_MIGRATE_PAUSED flag.

* src/libvirt.c (virDomainMigrateVersion1, virDomainMigrateVersion2):
  Automatically add VIR_MIGRATE_PAUSED when appropriate.
* src/xen/xend_internal.c (xenDaemonDomainMigratePerform): Give a nicer
  error message when migration of paused domains is attempted.
This commit is contained in:
Paolo Bonzini 2009-12-11 10:06:05 +01:00 committed by Daniel Veillard
parent edc9e78b48
commit 5de41c06a4
2 changed files with 22 additions and 1 deletions

View File

@ -2963,7 +2963,13 @@ virDomainMigrateVersion1 (virDomainPtr domain,
virDomainPtr ddomain = NULL; virDomainPtr ddomain = NULL;
char *uri_out = NULL; char *uri_out = NULL;
char *cookie = NULL; char *cookie = NULL;
int cookielen = 0; int cookielen = 0, ret;
virDomainInfo info;
ret = virDomainGetInfo (domain, &info);
if (ret == 0 && info.state == VIR_DOMAIN_PAUSED) {
flags |= VIR_MIGRATE_PAUSED;
}
/* Prepare the migration. /* Prepare the migration.
* *
@ -3028,6 +3034,7 @@ virDomainMigrateVersion2 (virDomainPtr domain,
char *cookie = NULL; char *cookie = NULL;
char *dom_xml = NULL; char *dom_xml = NULL;
int cookielen = 0, ret; int cookielen = 0, ret;
virDomainInfo info;
/* Prepare the migration. /* Prepare the migration.
* *
@ -3054,6 +3061,11 @@ virDomainMigrateVersion2 (virDomainPtr domain,
if (!dom_xml) if (!dom_xml)
return NULL; return NULL;
ret = virDomainGetInfo (domain, &info);
if (ret == 0 && info.state == VIR_DOMAIN_PAUSED) {
flags |= VIR_MIGRATE_PAUSED;
}
ret = dconn->driver->domainMigratePrepare2 ret = dconn->driver->domainMigratePrepare2
(dconn, &cookie, &cookielen, uri, &uri_out, flags, dname, (dconn, &cookie, &cookielen, uri, &uri_out, flags, dname,
bandwidth, dom_xml); bandwidth, dom_xml);

View File

@ -4444,6 +4444,15 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
if (flags & VIR_MIGRATE_PERSIST_DEST) if (flags & VIR_MIGRATE_PERSIST_DEST)
flags &= ~VIR_MIGRATE_PERSIST_DEST; flags &= ~VIR_MIGRATE_PERSIST_DEST;
/* This is buggy in Xend, but could be supported in principle. Give
* a nice error message.
*/
if (flags & VIR_MIGRATE_PAUSED) {
virXendError (conn, VIR_ERR_NO_SUPPORT,
"%s", _("xenDaemonDomainMigrate: xend cannot migrate paused domains"));
return -1;
}
/* XXX we could easily do tunnelled & peer2peer migration too /* XXX we could easily do tunnelled & peer2peer migration too
if we want to. support these... */ if we want to. support these... */
if (flags != 0) { if (flags != 0) {