[libvirt PATCH 42/80] qemu: Improve post-copy migration handling on reconnect
Peter Krempa
pkrempa at redhat.com
Thu May 12 07:59:19 UTC 2022
On Tue, May 10, 2022 at 17:21:03 +0200, Jiri Denemark wrote:
> When libvirt daemon is restarted during an active post-copy migration,
> we do not always mark the migration as broken. In this phase libvirt is
> not really needed for migration to finish successfully. In fact the
> migration could have even finished while libvirt was not running or it
> may still be happily running.
>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> src/qemu/qemu_migration.c | 27 +++++++++++++++++++++++++++
> src/qemu/qemu_migration.h | 6 ++++++
> src/qemu/qemu_process.c | 39 +++++++++++++++++++++++++++++----------
> 3 files changed, 62 insertions(+), 10 deletions(-)
>
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index dacea63610..854dfd43c1 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -2460,6 +2460,33 @@ qemuMigrationSrcBeginPhaseBlockDirtyBitmaps(qemuMigrationCookie *mig,
> }
>
>
> +int
> +qemuMigrationAnyRefreshStatus(virQEMUDriver *driver,
> + virDomainObj *vm,
> + virDomainAsyncJob asyncJob,
> + virDomainJobStatus *status)
> +{
> + g_autoptr(virDomainJobData) jobData = NULL;
> + qemuDomainJobDataPrivate *priv;
> +
> + jobData = virDomainJobDataInit(&qemuJobDataPrivateDataCallbacks);
> + priv = jobData->privateData;
> +
> + if (qemuMigrationAnyFetchStats(driver, vm, asyncJob, jobData, NULL) < 0)
> + return -1;
> +
> + qemuMigrationUpdateJobType(jobData);
> + VIR_DEBUG("QEMU reports domain '%s' is in '%s' migration state, "
> + "translated as %d",
Diagnostics on a single line please
> + vm->def->name,
> + qemuMonitorMigrationStatusTypeToString(priv->stats.mig.status),
> + jobData->status);
> +
> + *status = jobData->status;
> + return 0;
> +}
> +
[...]
> @@ -3731,7 +3728,29 @@ qemuProcessRecoverMigration(virQEMUDriver *driver,
> return -1;
>
> if (rc > 0) {
> - qemuProcessRestoreMigrationJob(vm, job);
> + if (migStatus == VIR_DOMAIN_JOB_STATUS_POSTCOPY) {
> + VIR_DEBUG("Post-copy migration of domain %s still running, it "
> + "will be handled as unattended", vm->def->name);
This one too.
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
More information about the libvir-list
mailing list