mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
qemu_migration: Fix p2p post-copy recovery
Although the qemuMigrationSrcPerformResume actually got called indirectly via qemuMigrationSrcPerformNative and the recovery process worked, wrong job phases were used for the "perform" phase, which could cause issues when libvirt daemon crashed (or was otherwise restarted) during post-copy recovery. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
parent
693c6b4a81
commit
7166d26fc9
@ -5642,33 +5642,40 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriver *driver,
|
||||
* confirm migration completion.
|
||||
*/
|
||||
VIR_DEBUG("Perform3 %p uri=%s", sconn, NULLSTR(uri));
|
||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3));
|
||||
VIR_FREE(cookiein);
|
||||
cookiein = g_steal_pointer(&cookieout);
|
||||
cookieinlen = cookieoutlen;
|
||||
cookieoutlen = 0;
|
||||
if (flags & VIR_MIGRATE_TUNNELLED) {
|
||||
ret = qemuMigrationSrcPerformTunnel(driver, vm, st, persist_xml,
|
||||
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
ret = qemuMigrationSrcPerformResume(driver, dconn, vm, uri, migParams,
|
||||
cookiein, cookieinlen,
|
||||
&cookieout, &cookieoutlen,
|
||||
flags, bandwidth, dconn, graphicsuri,
|
||||
nmigrate_disks, migrate_disks,
|
||||
migParams);
|
||||
&cookieout, &cookieoutlen, flags);
|
||||
} else {
|
||||
ret = qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri,
|
||||
cookiein, cookieinlen,
|
||||
&cookieout, &cookieoutlen,
|
||||
flags, bandwidth, dconn, graphicsuri,
|
||||
nmigrate_disks, migrate_disks,
|
||||
migParams, nbdURI);
|
||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3));
|
||||
if (flags & VIR_MIGRATE_TUNNELLED) {
|
||||
ret = qemuMigrationSrcPerformTunnel(driver, vm, st, persist_xml,
|
||||
cookiein, cookieinlen,
|
||||
&cookieout, &cookieoutlen,
|
||||
flags, bandwidth, dconn, graphicsuri,
|
||||
nmigrate_disks, migrate_disks,
|
||||
migParams);
|
||||
} else {
|
||||
ret = qemuMigrationSrcPerformNative(driver, vm, persist_xml, uri,
|
||||
cookiein, cookieinlen,
|
||||
&cookieout, &cookieoutlen,
|
||||
flags, bandwidth, dconn, graphicsuri,
|
||||
nmigrate_disks, migrate_disks,
|
||||
migParams, nbdURI);
|
||||
}
|
||||
|
||||
if (ret == 0)
|
||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3_DONE));
|
||||
}
|
||||
|
||||
/* Perform failed. Make sure Finish doesn't overwrite the error */
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
virErrorPreserveLast(&orig_err);
|
||||
} else {
|
||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_PERFORM3_DONE));
|
||||
}
|
||||
|
||||
/* If Perform returns < 0, then we need to cancel the VM
|
||||
* startup on the destination
|
||||
|
Loading…
Reference in New Issue
Block a user