From: Fabiano Rosas <farosas@suse.de>
To: Bin Guo <guobin@linux.alibaba.com>
Cc: peterx@redhat.com, qemu-devel@nongnu.org
Subject: Re: [PATCH v2 03/24] migration: Normalize tls arguments
Date: Thu, 23 Oct 2025 11:29:20 -0300 [thread overview]
Message-ID: <871pmtu1xb.fsf@suse.de> (raw)
In-Reply-To: <20251015023114.24876-1-guobin@linux.alibaba.com>
Bin Guo <guobin@linux.alibaba.com> writes:
> Fabiano Rosas wrote on Mon, 30 Jun 2025 16:58:52 -0300:
>
>> The migration parameters tls_creds, tls_authz and tls_hostname
>> currently have a non-uniform handling. When used as arguments to
>> migrate-set-parameters, their type is StrOrNull and when used as
>> return value from query-migrate-parameters their type is a plain
>> string.
>>
>> Not only having to convert between the types is cumbersome, but it
>> also creates the issue of requiring two different QAPI types to be
>> used, one for each command. MigrateSetParameters is used for
>> migrate-set-parameters with the TLS arguments as StrOrNull while
>> MigrationParameters is used for query-migrate-parameters with the TLS
>> arguments as str.
>>
>> Since StrOrNull could be considered a superset of str, change the type
>> of the TLS arguments in MigrationParameters to StrOrNull. Also ensure
>> that QTYPE_QNULL is never used.
>>
>> 1) migrate-set-parameters will always write QTYPE_QSTRING to
>> s->parameters, either an empty or non-empty string.
>>
>> 2) query-migrate-parameters will always return a QTYPE_QSTRING, either
>> empty or non-empty.
>>
>> 3) the migrate_tls_* helpers will always return a non-empty string or
>> NULL, for the internal migration code's consumption.
>>
>> Points (1) and (2) above help simplify the parameters validation and
>> the query command handling because s->parameters is already kept in
>> the format that query-migrate-parameters (and info migrate_paramters)
>> expect. Point (3) is so people don't need to care about StrOrNull in
>> migration code.
>>
>> This will allow the type duplication to be removed in the next
>> patches.
>>
>> Note that the type of @tls_creds, @tls-hostname, @tls-authz changes
>> from str to StrOrNull in introspection of the query-migrate-parameters
>> command. We accept this imprecision to enable de-duplication.
>>
>> There's no need to free the TLS options in
>> migration_instance_finalize() because they're freed by the qdev
>> properties .release method.
>>
>> Temporary in this patch:
>> migrate_params_test_apply() copies s->parameters into a temporary
>> structure, so it's necessary to drop the references to the TLS options
>> if they were not set by the user to avoid double-free. This is fixed
>> in the next patches.
>>
>> Signed-off-by: Fabiano Rosas <farosas@suse.de>
>> ---
>> migration/migration-hmp-cmds.c | 7 +-
>> migration/options.c | 156 ++++++++++++++++++++-------------
>> migration/options.h | 1 +
>> migration/tls.c | 2 +-
>> qapi/migration.json | 6 +-
>> 5 files changed, 106 insertions(+), 66 deletions(-)
>>
>> +void migrate_tls_opts_free(MigrationParameters *params)
>> +{
>> + qapi_free_StrOrNull(params->tls_creds);
>> + qapi_free_StrOrNull(params->tls_hostname);
>> + qapi_free_StrOrNull(params->tls_authz);
>> +}
>> +
>> +/* either non-empty or empty string */
>> +static void tls_opt_to_str(StrOrNull **tls_opt)
>> +{
>> + StrOrNull *opt = *tls_opt;
>> +
>> + if (!opt) {
>> + return;
>> + }
>> +
>> + switch (opt->type) {
>> + case QTYPE_QSTRING:
>> + return;
>> + case QTYPE_QNULL:
>> + qobject_unref(opt->u.n);
>> + break;
>> + default:
>> + g_assert_not_reached();
>> + }
>> +
>> + opt->type = QTYPE_QSTRING;
>> + opt->u.s = g_strdup("");
>> + *tls_opt = opt;
>> +}
>> +
>
> Can these two functions be changed to be general, not just for tls?
> IMHO:
> void migrate_strornull_opts_free(MigrationParameters *params)
> boid strornull_to_str(StrOrNull **the_opt)
>
> In this way, when members of type StrOrNull are added later,
> the function can be reused.
>
Ah, that's a clever observation, but we should probably refrain from
adding more StrOrNull options. The original intent behind the creation
of this type was already to workaround issues with the TLS options. I'd
rather leave it like this.
> --
> Bin Guo
next prev parent reply other threads:[~2025-10-23 14:30 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-30 19:58 [PATCH v2 00/24] migration: Unify capabilities and parameters Fabiano Rosas
2025-06-30 19:58 ` [PATCH v2 01/24] migration: Fix leak of block_bitmap_mapping Fabiano Rosas
2025-07-01 6:12 ` Markus Armbruster
2025-07-03 21:31 ` Peter Xu
2025-07-04 5:09 ` Markus Armbruster
2025-06-30 19:58 ` [PATCH v2 02/24] migration: Add a qdev property for StrOrNull Fabiano Rosas
2025-07-01 6:38 ` Markus Armbruster
2025-07-03 22:32 ` Peter Xu
2025-07-04 12:58 ` Fabiano Rosas
2025-06-30 19:58 ` [PATCH v2 03/24] migration: Normalize tls arguments Fabiano Rosas
2025-07-01 7:46 ` Markus Armbruster
2025-07-01 14:20 ` Fabiano Rosas
2025-07-04 13:12 ` Fabiano Rosas
2025-07-04 15:37 ` Peter Xu
2025-08-20 15:45 ` Fabiano Rosas
2025-10-15 2:31 ` Bin Guo
2025-10-23 14:29 ` Fabiano Rosas [this message]
2025-06-30 19:58 ` [PATCH v2 04/24] migration: Remove MigrateSetParameters Fabiano Rosas
2025-07-01 8:00 ` Markus Armbruster
2025-07-03 19:34 ` Fabiano Rosas
2025-07-04 4:25 ` Markus Armbruster
2025-07-04 15:39 ` Peter Xu
2025-06-30 19:58 ` [PATCH v2 05/24] qapi/migration: Don't document MigrationParameter Fabiano Rosas
2025-07-01 8:04 ` Markus Armbruster
2025-07-04 15:40 ` Peter Xu
2025-06-30 19:58 ` [PATCH v2 06/24] migration: Run a post update routine after setting parameters Fabiano Rosas
2025-10-13 6:10 ` Bin Guo
2025-10-23 14:30 ` Fabiano Rosas
2025-06-30 19:58 ` [PATCH v2 07/24] migration: Add a flag to track block-bitmap-mapping input Fabiano Rosas
2025-07-04 15:42 ` Peter Xu
2025-06-30 19:58 ` [PATCH v2 08/24] migration: Remove checks for s->parameters has_* fields Fabiano Rosas
2025-06-30 19:58 ` [PATCH v2 09/24] migration: Do away with usage of QERR_INVALID_PARAMETER_VALUE Fabiano Rosas
2025-07-04 16:04 ` Peter Xu
2025-06-30 19:58 ` [PATCH v2 10/24] migration: Extract code to mark all parameters as present Fabiano Rosas
2025-06-30 19:59 ` [PATCH v2 11/24] migration: Use QAPI_CLONE_MEMBERS in query_migrate_parameters Fabiano Rosas
2025-07-04 16:11 ` Peter Xu
2025-06-30 19:59 ` [PATCH v2 12/24] migration: Use QAPI_CLONE_MEMBERS in migrate_params_test_apply Fabiano Rosas
2025-06-30 19:59 ` [PATCH v2 13/24] migration: Use QAPI_CLONE_MEMBERS in migrate_params_apply Fabiano Rosas
2025-08-13 19:05 ` Peter Xu
2025-08-14 15:04 ` Fabiano Rosas
2025-06-30 19:59 ` [PATCH v2 14/24] migration: Use visitors in migrate_params_test_apply Fabiano Rosas
2025-08-13 20:05 ` Peter Xu
2025-08-14 15:10 ` Fabiano Rosas
2025-08-14 19:40 ` Peter Xu
2025-10-15 2:16 ` Bin Guo
2025-10-23 14:46 ` Fabiano Rosas
2025-06-30 19:59 ` [PATCH v2 15/24] migration: Cleanup hmp_info_migrate_parameters Fabiano Rosas
2025-08-13 20:40 ` Peter Xu
2025-06-30 19:59 ` [PATCH v2 16/24] migration: Add capabilities into MigrationParameters Fabiano Rosas
2025-07-01 8:25 ` Markus Armbruster
2025-07-04 13:15 ` Fabiano Rosas
2025-07-04 14:04 ` Markus Armbruster
2025-07-04 14:48 ` Fabiano Rosas
2025-07-04 15:04 ` Markus Armbruster
2025-07-04 16:33 ` Peter Xu
2025-06-30 19:59 ` [PATCH v2 17/24] migration: Remove s->capabilities Fabiano Rosas
2025-08-13 20:48 ` Peter Xu
2025-06-30 19:59 ` [PATCH v2 18/24] qapi/migration: Deprecate capabilities commands Fabiano Rosas
2025-07-01 8:30 ` Markus Armbruster
2025-07-01 8:38 ` Jiri Denemark
2025-07-01 9:00 ` Peter Krempa
2025-07-01 9:10 ` Daniel P. Berrangé
2025-08-13 20:50 ` Peter Xu
2025-06-30 19:59 ` [PATCH v2 19/24] migration: Store the initial values used for s->parameters Fabiano Rosas
2025-08-13 21:09 ` Peter Xu
2025-06-30 19:59 ` [PATCH v2 20/24] migration: Allow migrate commands to provide the migration config Fabiano Rosas
2025-07-01 8:35 ` Markus Armbruster
2025-08-13 21:27 ` Peter Xu
2025-08-14 15:13 ` Fabiano Rosas
2025-06-30 19:59 ` [PATCH v2 21/24] tests/qtest/migration: Take reference when passing %p to qtest_qmp Fabiano Rosas
2025-08-13 22:22 ` Peter Xu
2025-08-21 17:20 ` Fabiano Rosas
2025-06-30 19:59 ` [PATCH v2 22/24] tests/qtest/migration: Adapt the capabilities helper to take a config Fabiano Rosas
2025-08-14 14:02 ` Peter Xu
2025-06-30 19:59 ` [PATCH v2 23/24] tests/qtest/migration: Adapt convergence routines to config Fabiano Rosas
2025-06-30 19:59 ` [PATCH v2 24/24] tests/qtest/migration: Pass the migration config to file tests Fabiano Rosas
2025-08-14 14:24 ` Peter Xu
2025-08-14 15:30 ` Fabiano Rosas
2025-08-14 19:45 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871pmtu1xb.fsf@suse.de \
--to=farosas@suse.de \
--cc=guobin@linux.alibaba.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).