Fix VM teardown if prepare returns invalid URI in v2 migration
The v2 migration protocol was accidentally missing out the finish step, when prepare succeeded, but returned an invalid URI * src/libvirt.c: Teardown VM if prepare returns invalid URI
This commit is contained in:
parent
13cb49f847
commit
6b0fa703a8
@ -3597,6 +3597,7 @@ virDomainMigrateVersion2 (virDomainPtr domain,
|
|||||||
int cookielen = 0, ret;
|
int cookielen = 0, ret;
|
||||||
virDomainInfo info;
|
virDomainInfo info;
|
||||||
virErrorPtr orig_err = NULL;
|
virErrorPtr orig_err = NULL;
|
||||||
|
int cancelled;
|
||||||
|
|
||||||
/* Prepare the migration.
|
/* Prepare the migration.
|
||||||
*
|
*
|
||||||
@ -3642,7 +3643,8 @@ virDomainMigrateVersion2 (virDomainPtr domain,
|
|||||||
virLibConnError(VIR_ERR_INTERNAL_ERROR,
|
virLibConnError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("domainMigratePrepare2 did not set uri"));
|
_("domainMigratePrepare2 did not set uri"));
|
||||||
virDispatchError(domain->conn);
|
virDispatchError(domain->conn);
|
||||||
goto done;
|
cancelled = 1;
|
||||||
|
goto finish;
|
||||||
}
|
}
|
||||||
if (uri_out)
|
if (uri_out)
|
||||||
uri = uri_out; /* Did domainMigratePrepare2 change URI? */
|
uri = uri_out; /* Did domainMigratePrepare2 change URI? */
|
||||||
@ -3658,6 +3660,12 @@ virDomainMigrateVersion2 (virDomainPtr domain,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
orig_err = virSaveLastError();
|
orig_err = virSaveLastError();
|
||||||
|
|
||||||
|
/* If Perform returns < 0, then we need to cancel the VM
|
||||||
|
* startup on the destination
|
||||||
|
*/
|
||||||
|
cancelled = ret < 0 ? 1 : 0;
|
||||||
|
|
||||||
|
finish:
|
||||||
/* In version 2 of the migration protocol, we pass the
|
/* In version 2 of the migration protocol, we pass the
|
||||||
* status code from the sender to the destination host,
|
* status code from the sender to the destination host,
|
||||||
* so it can do any cleanup if the migration failed.
|
* so it can do any cleanup if the migration failed.
|
||||||
@ -3665,7 +3673,7 @@ virDomainMigrateVersion2 (virDomainPtr domain,
|
|||||||
dname = dname ? dname : domain->name;
|
dname = dname ? dname : domain->name;
|
||||||
VIR_DEBUG("Finish2 %p ret=%d", dconn, ret);
|
VIR_DEBUG("Finish2 %p ret=%d", dconn, ret);
|
||||||
ddomain = dconn->driver->domainMigrateFinish2
|
ddomain = dconn->driver->domainMigrateFinish2
|
||||||
(dconn, dname, cookie, cookielen, uri, flags, ret);
|
(dconn, dname, cookie, cookielen, uri, flags, cancelled);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
if (orig_err) {
|
if (orig_err) {
|
||||||
@ -3760,7 +3768,8 @@ virDomainMigrateVersion3(virDomainPtr domain,
|
|||||||
virLibConnError(VIR_ERR_INTERNAL_ERROR,
|
virLibConnError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("domainMigratePrepare3 did not set uri"));
|
_("domainMigratePrepare3 did not set uri"));
|
||||||
virDispatchError(domain->conn);
|
virDispatchError(domain->conn);
|
||||||
goto done;
|
cancelled = 1;
|
||||||
|
goto finish;
|
||||||
}
|
}
|
||||||
if (uri_out)
|
if (uri_out)
|
||||||
uri = uri_out; /* Did domainMigratePrepare3 change URI? */
|
uri = uri_out; /* Did domainMigratePrepare3 change URI? */
|
||||||
@ -3789,6 +3798,7 @@ virDomainMigrateVersion3(virDomainPtr domain,
|
|||||||
*/
|
*/
|
||||||
cancelled = ret < 0 ? 1 : 0;
|
cancelled = ret < 0 ? 1 : 0;
|
||||||
|
|
||||||
|
finish:
|
||||||
/*
|
/*
|
||||||
* The status code from the source is passed to the destination.
|
* The status code from the source is passed to the destination.
|
||||||
* The dest can cleanup if the source indicated it failed to
|
* The dest can cleanup if the source indicated it failed to
|
||||||
|
Loading…
x
Reference in New Issue
Block a user