From nobody Mon Dec 15 23:05:28 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 152345775907173.25021593207339; Wed, 11 Apr 2018 07:42:39 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C83F93137720; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9C4918779A; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5EE044CAA8; Wed, 11 Apr 2018 14:42:37 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w3BEgECN008688 for ; Wed, 11 Apr 2018 10:42:14 -0400 Received: by smtp.corp.redhat.com (Postfix) id 781AA10B0F3B; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3B1B310B0F38 for ; Wed, 11 Apr 2018 14:42:14 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 2A7211004CE; Wed, 11 Apr 2018 16:42:10 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 11 Apr 2018 16:41:06 +0200 Message-Id: <4bfe1f90247546be48c67e00a89eb88cb3f5980b.1523456479.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 16/73] qemu: Reset all migration parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 11 Apr 2018 14:42:38 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Restore the original values of all migration parameters we store in qemuDomainJobObj instead of explicitly resting only a limited set of them. The result is not strictly equivalent to the previous code wrt reseting TLS state because the previous code would only reset it if we changed it before while the new code will reset it always if QEMU supports TLS migration. This is not a problem for the parameters themselves, but it can cause spurious errors about missing TLS objects being logged at the end of non-TLS migration. This issue will be fixed ~50 patches later. Signed-off-by: Jiri Denemark Reviewed-by: J=EF=BF=BDn Tomko --- src/qemu/qemu_migration.c | 20 +++++++++---- src/qemu/qemu_migration_params.c | 48 +++++++++++--------------------- src/qemu/qemu_migration_params.h | 3 +- src/qemu/qemu_process.c | 4 +-- 4 files changed, 34 insertions(+), 41 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 96ca5593cf..72fcae77f4 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -1834,7 +1834,8 @@ qemuMigrationSrcCleanup(virDomainObjPtr vm, VIR_WARN("Migration of domain %s finished but we don't know if the" " domain was successfully started on destination or not", vm->def->name); - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); /* clear the job and let higher levels decide what to do */ qemuDomainObjDiscardAsyncJob(driver, vm); break; @@ -2593,7 +2594,8 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, return ret; =20 stopjob: - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + priv->job.migParams); =20 if (stopProcess) { unsigned int stopFlags =3D VIR_QEMU_PROCESS_STOP_MIGRATED; @@ -2969,7 +2971,8 @@ qemuMigrationSrcConfirmPhase(virQEMUDriverPtr driver, qemuDomainEventQueue(driver, event); } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); =20 if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm, driver-= >caps) < 0) VIR_WARN("Failed to save status on vm %s", vm->def->name); @@ -4581,6 +4584,7 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, int ret =3D -1; virErrorPtr orig_err =3D NULL; virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + qemuDomainObjPrivatePtr priv =3D vm->privateData; =20 if (qemuMigrationJobStart(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT) < = 0) goto cleanup; @@ -4641,7 +4645,8 @@ qemuMigrationSrcPerformJob(virQEMUDriverPtr driver, * here */ if (!v3proto && ret < 0) - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); =20 if (qemuMigrationSrcRestoreDomainState(driver, vm)) { event =3D virDomainEventLifecycleNewFromObj(vm, @@ -4691,6 +4696,7 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, unsigned long flags, unsigned long resource) { + qemuDomainObjPrivatePtr priv =3D vm->privateData; virObjectEventPtr event =3D NULL; int ret =3D -1; =20 @@ -4731,7 +4737,8 @@ qemuMigrationSrcPerformPhase(virQEMUDriverPtr driver, =20 endjob: if (ret < 0) { - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_OUT, + priv->job.migParams); qemuMigrationJobFinish(driver, vm); } else { qemuMigrationJobContinue(vm); @@ -5187,7 +5194,8 @@ qemuMigrationDstFinish(virQEMUDriverPtr driver, VIR_FREE(priv->job.completed); } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + priv->job.migParams); =20 qemuMigrationJobFinish(driver, vm); if (!virDomainObjIsActive(vm)) diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 465132fd9c..72836ba9fa 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -378,30 +378,19 @@ qemuMigrationParamsSetCompression(virQEMUDriverPtr dr= iver, * * Deconstruct all the setup possibly done for TLS - delete the TLS and * security objects, free the secinfo, and reset the migration params to "= ". - * - * Returns 0 on success, -1 on failure */ -static int +static void qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob) + int asyncJob, + qemuMigrationParamsPtr origParams) { - qemuDomainObjPrivatePtr priv =3D vm->privateData; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMigrationParamsPtr migParams =3D NULL; - int ret =3D -1; =20 - if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) - return -1; - - /* If the tls-creds doesn't exist or if they're set to "" then there's - * nothing to do since we never set anything up */ - if (!priv->migTLSAlias || !*priv->migTLSAlias) - return 0; - - if (!(migParams =3D qemuMigrationParamsNew())) - goto cleanup; + /* If QEMU does not support TLS migration we didn't set the aliases. */ + if (!origParams->params.tlsCreds) + return; =20 /* NB: If either or both fail to allocate memory we can still proceed * since the next time we migrate another deletion attempt will be @@ -410,21 +399,10 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, secAlias =3D qemuDomainGetSecretAESAlias(QEMU_MIGRATION_TLS_ALIAS_BASE= , false); =20 qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); - qemuDomainSecretInfoFree(&priv->migSecinfo); + qemuDomainSecretInfoFree(&QEMU_DOMAIN_PRIVATE(vm)->migSecinfo); =20 - if (VIR_STRDUP(migParams->params.tlsCreds, "") < 0 || - VIR_STRDUP(migParams->params.tlsHostname, "") < 0 || - qemuMigrationParamsSet(driver, vm, asyncJob, migParams) < 0) - goto cleanup; - - ret =3D 0; - - cleanup: VIR_FREE(tlsAlias); VIR_FREE(secAlias); - qemuMigrationParamsFree(migParams); - - return ret; } =20 =20 @@ -475,16 +453,22 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, void qemuMigrationParamsReset(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob) + int asyncJob, + qemuMigrationParamsPtr origParams) { qemuMonitorMigrationCaps cap; virErrorPtr err =3D virSaveLastError(); =20 + VIR_DEBUG("Resetting migration parameters %p", origParams); + if (!virDomainObjIsActive(vm)) goto cleanup; =20 - if (qemuMigrationParamsResetTLS(driver, vm, asyncJob) < 0) - goto cleanup; + if (origParams) { + if (qemuMigrationParamsSet(driver, vm, asyncJob, origParams) < 0) + goto cleanup; + qemuMigrationParamsResetTLS(driver, vm, asyncJob, origParams); + } =20 for (cap =3D 0; cap < QEMU_MONITOR_MIGRATION_CAPS_LAST; cap++) { if (qemuMigrationCapsGet(vm, cap) && diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index c283a81b51..b7649128f8 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -108,7 +108,8 @@ qemuMigrationParamsCheck(virQEMUDriverPtr driver, void qemuMigrationParamsReset(virQEMUDriverPtr driver, virDomainObjPtr vm, - int asyncJob); + int asyncJob, + qemuMigrationParamsPtr origParams); =20 int qemuMigrationCapsCheck(virQEMUDriverPtr driver, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index fd81933f2e..6aa4f4ed71 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3085,7 +3085,7 @@ qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, break; } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE, job->migPara= ms); return 0; } =20 @@ -3179,7 +3179,7 @@ qemuProcessRecoverMigrationOut(virQEMUDriverPtr drive= r, } } =20 - qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE); + qemuMigrationParamsReset(driver, vm, QEMU_ASYNC_JOB_NONE, job->migPara= ms); return 0; } =20 --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list