mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
qemu: Implement VIR_MIGRATE_POSTCOPY_RESUME for Confirm phase
Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
f2a19b4cd0
commit
491c9eff6c
@ -3777,15 +3777,19 @@ qemuMigrationSrcConfirmPhase(virQEMUDriver *driver,
|
||||
|
||||
virCheckFlags(QEMU_MIGRATION_FLAGS, -1);
|
||||
|
||||
/* Keep the original migration phase in case post-copy failed as the job
|
||||
* will stay active even though migration API finishes with an error.
|
||||
*/
|
||||
if (virDomainObjIsFailedPostcopy(vm))
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM_RESUME;
|
||||
} else if (virDomainObjIsFailedPostcopy(vm)) {
|
||||
/* Keep the original migration phase in case post-copy failed as the
|
||||
* job will stay active even though migration API finishes with an
|
||||
* error.
|
||||
*/
|
||||
phase = priv->job.phase;
|
||||
else if (retcode == 0)
|
||||
} else if (retcode == 0) {
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM3;
|
||||
else
|
||||
} else {
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM3_CANCELLED;
|
||||
}
|
||||
|
||||
if (qemuMigrationJobStartPhase(vm, phase) < 0)
|
||||
return -1;
|
||||
@ -3860,18 +3864,28 @@ qemuMigrationSrcConfirm(virQEMUDriver *driver,
|
||||
qemuDomainObjPrivate *priv = vm->privateData;
|
||||
int ret = -1;
|
||||
|
||||
if (!qemuMigrationJobIsActive(vm, VIR_ASYNC_JOB_MIGRATION_OUT))
|
||||
goto cleanup;
|
||||
VIR_DEBUG("vm=%p, flags=0x%x, cancelled=%d", vm, flags, cancelled);
|
||||
|
||||
/* Keep the original migration phase in case post-copy failed as the job
|
||||
* will stay active even though migration API finishes with an error.
|
||||
*/
|
||||
if (virDomainObjIsFailedPostcopy(vm))
|
||||
phase = priv->job.phase;
|
||||
else if (cancelled)
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM3_CANCELLED;
|
||||
else
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM3;
|
||||
if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
|
||||
if (!qemuMigrationAnyCanResume(vm, VIR_ASYNC_JOB_MIGRATION_OUT, flags,
|
||||
QEMU_MIGRATION_PHASE_PERFORM_RESUME))
|
||||
goto cleanup;
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM_RESUME;
|
||||
} else {
|
||||
if (!qemuMigrationJobIsActive(vm, VIR_ASYNC_JOB_MIGRATION_OUT))
|
||||
goto cleanup;
|
||||
|
||||
/* Keep the original migration phase in case post-copy failed as the
|
||||
* job will stay active even though migration API finishes with an
|
||||
* error.
|
||||
*/
|
||||
if (virDomainObjIsFailedPostcopy(vm))
|
||||
phase = priv->job.phase;
|
||||
else if (cancelled)
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM3_CANCELLED;
|
||||
else
|
||||
phase = QEMU_MIGRATION_PHASE_CONFIRM3;
|
||||
}
|
||||
|
||||
if (qemuMigrationJobStartPhase(vm, phase) < 0)
|
||||
goto cleanup;
|
||||
|
Loading…
Reference in New Issue
Block a user