[libvirt PATCH 69/80] qemu: Implement VIR_MIGRATE_POSTCOPY_RESUME for Finish phase
Peter Krempa
pkrempa at redhat.com
Thu May 12 15:20:34 UTC 2022
On Tue, May 10, 2022 at 17:21:30 +0200, Jiri Denemark wrote:
> Everything was already done in the normal Finish phase and vCPUs are
> running. We just need to wait for all remaining data to be transferred.
>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> src/qemu/qemu_migration.c | 46 ++++++++++++++++++++++++++++++++++-----
> 1 file changed, 40 insertions(+), 6 deletions(-)
>
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index a8481f7515..430dfb1abb 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -6600,6 +6600,22 @@ qemuMigrationDstFinishFresh(virQEMUDriver *driver,
> }
>
>
> +static int
> +qemuMigrationDstFinishResume(virQEMUDriver *driver,
> + virDomainObj *vm)
> +{
> + VIR_DEBUG("vm=%p", vm);
> +
> + if (qemuMigrationDstWaitForCompletion(driver, vm,
> + VIR_ASYNC_JOB_MIGRATION_IN,
> + false) < 0) {
> + return -1;
> + }
As I mentioned in another reply, IMO it would be useful to allow
adoption of a unattended running migration precisely for this case, so
that mgmt apps don't have to encode more logic to wait for events if
migration was actually running fine.
> +
> + return 0;
> +}
> +
> +
> static virDomainPtr
> qemuMigrationDstFinishActive(virQEMUDriver *driver,
> virConnectPtr dconn,
> @@ -6647,8 +6663,14 @@ qemuMigrationDstFinishActive(virQEMUDriver *driver,
> goto error;
> }
>
> - rc = qemuMigrationDstFinishFresh(driver, vm, mig, flags, v3proto,
> - timeReceived, &doKill, &inPostCopy);
> + if (flags & VIR_MIGRATE_POSTCOPY_RESUME) {
> + rc = qemuMigrationDstFinishResume(driver, vm);
> + inPostCopy = true;
> + } else {
> + rc = qemuMigrationDstFinishFresh(driver, vm, mig, flags, v3proto,
> + timeReceived, &doKill, &inPostCopy);
> + }
> +
> if (rc < 0 ||
> !(dom = virGetDomain(dconn, vm->def->name, vm->def->uuid, vm->def->id)))
> goto error;
> @@ -6719,6 +6741,8 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
> qemuDomainObjPrivate *priv = vm->privateData;
> unsigned short port;
> unsigned long long timeReceived = 0;
> + int phase = v3proto ? QEMU_MIGRATION_PHASE_FINISH3
> + : QEMU_MIGRATION_PHASE_FINISH2;
Avoid use of ?
>
> VIR_DEBUG("driver=%p, dconn=%p, vm=%p, cookiein=%s, cookieinlen=%d, "
> "cookieout=%p, cookieoutlen=%p, flags=0x%lx, retcode=%d",
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
More information about the libvir-list
mailing list