All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Fabiano Rosas <farosas@suse.de>
Cc: qemu-devel@nongnu.org, "Peter Xu" <peterx@redhat.com>,
	"Daniel P . Berrangé" <berrange@redhat.com>
Subject: Re: [RFC PATCH 07/13] migration: Introduce new MigrationConfig structure
Date: Mon, 26 May 2025 09:37:12 +0200	[thread overview]
Message-ID: <87cybvbz6f.fsf@pond.sub.org> (raw)
In-Reply-To: <87ldqn5twe.fsf@suse.de> (Fabiano Rosas's message of "Fri, 23 May 2025 10:38:41 -0300")

Fabiano Rosas <farosas@suse.de> writes:

> Markus Armbruster <armbru@redhat.com> writes:
>
> Markus, sorry for the delay here. I had vacations and holidays, plus a
> pile of patches to review.

No problem.  Hope you enjoyed your time off!

>> Fabiano Rosas <farosas@suse.de> writes:
>>
>>> Add a new migration structure to consolidate the capabilities and
>>> parameters. This structure will be used in place of the s->parameters
>>> and s->capabilities data structures in the next few patches.
>>>
>>> The QAPI migration types now look like this:
>>>
>>> /* options previously known as parameters */
>>
>> Configuration previously known as parameters less the TLS stuff.
>>
>>> { 'struct': 'MigrationConfigBase',
>>>   'data': {
>>>       <parameters>
>>> } }
>>>
>>>
>>> /* for compat with query-migrate-parameters */
>>> { 'struct': 'MigrationParameters',
>>>   'base': 'MigrationConfigBase',
>>>   'data': {
>>>       <TLS options in 'str' format>
>>> } }
>>>
>>> /* for compat with migrate-set-parameters */
>>> { 'struct': 'MigrateSetParameters',
>>>   'base': 'MigrationConfigBase',
>>>   'data': {
>>>       <TLS options in 'StrOrNull' format>
>>> } }
>>
>> Yes, this is the state since PATCH 05.
>>
>>> /* to replace MigrationParameters in the MigrationState */
>>> { 'struct': 'MigrationConfig',
>>>   'base': 'MigrationConfigBase'
>>>   'data': {
>>>     <TLS options in 'str' format>
>>> } }
>>
>> This is new in this patch.
>>
>> Your description doesn't cover optionalness.  Here's my understanding:
>>
>> * MigrationSetParameters has optional members, because
>>   migrate-set-parameters needs that.
>>
>
> Yes.
>
>> * MigrationParameters would ideally have these members non-optional,
>>   because query-migrate-parameters wants that.
>>
>
> Yes.
>
>> * But to enable sharing via common base type MigrationConfigBase, we
>>   accept unwanted optional in MigrationParameters and thus
>>   query-migrate-parameters.
>>
>
> Yes.
>
>> * This doesn't apply to the non-shared members of MigrationParameters,
>>   so you made them non-optional.  These are @tls-creds, @tls-hostname,
>>   @tls-authz.
>>
>
> Yes.
>
>> * But in MigrationConfig they're optional again, because "empty string
>>   means absent" is silly; we want "NULL means absent".
>>
>
> Yes. But mostly because MigrationConfig will become the type for the new
> '*config' argument to migrate/migrate_incoming (patches 12 & 13) and we
> want to keep all members optional. Otherwise the user would have to pass
> all ~50 migration options in every migrate command, which is bad IMO.

Got it.

>> Correct?
>>
>> Up to here, this enables cleanup of some "empty string means absent"
>> silliness in later patches.
>>
>> The remainder is about unifying capabilities into parameters.  I'd split
>> the patch (but I'm a compulsive patch splitter).
>>
>>> The above keeps the query/set-parameters commands stable. For the
>>> capabilities as well as the options added in the future, we have a
>>> choice of where to put them:
>>>
>>> 1) In MigrationConfigBase, this means that the existing
>>>    query/set-parameters commands will be updated to deal with
>>>    capabilities/new options.
>>>
>>>   { 'struct': 'MigrationConfigBase',
>>>     'data': {
>>>       <parameters>
>>>       <capabilities>
>>>       <new opts>
>>>   } }
>>>
>>>   { 'struct': 'MigrationConfig',
>>>     'base': 'MigrationConfigBase'
>>>     'data': {
>>>       <TLS options in 'str' format>
>>>   } }
>>>
>>> 2) In MigrationConfig, this means that the existing commands will be
>>>    frozen in time.
>>>
>>>   { 'struct': 'MigrationConfigBase',
>>>     'data': {
>>>       <parameters>
>>>   } }
>>>
>>>   { 'struct': 'MigrationConfig',
>>>     'base': 'MigrationConfigBase'
>>>     'data': {
>>>       <TLS options in 'str' format>
>>>       <capabilities>
>>>       <new opts>
>>>   } }
>>>
>>> For now, I've chosen the option 1, all capabilities and new options go
>>> into MigrationConfigBase. This gives the option to keep the existing
>>> commands for as long as we'd like.
>>
>> Perhaps this would be slightly easier to digest for the reader if you
>> talked just about capabilities at first.  Once that's understood,
>> mention we have the same choice for new configuration bits.
>>
>
> Ok, I'll reorganize, along with the other comments you've made.
>
>>> Note that the query/set capabilities commands will have to go, we can
>>> treat parameters as generic configuration options, but capabilities
>>> are just too different.
>>
>> I think the argument is that migration capabilities are a pointless
>> interface complication.  One mechanism (parameters) is better than two
>> (parameters and capabilities).
>>
>
> Yes, that's the main point indeed.

Perhaps you can make this point more prominently.

>>> Signed-off-by: Fabiano Rosas <farosas@suse.de>

[...]



  reply	other threads:[~2025-05-26  7:38 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-11 19:14 [RFC PATCH 00/13] migration: Unify capabilities and parameters Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 01/13] migration: Fix latent bug in migrate_params_test_apply() Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 02/13] migration: Normalize tls arguments Fabiano Rosas
2025-04-14 16:30   ` Daniel P. Berrangé
2025-04-11 19:14 ` [RFC PATCH 03/13] migration: Run a post update routine after setting parameters Fabiano Rosas
2025-05-15 20:42   ` Peter Xu
2025-04-11 19:14 ` [RFC PATCH 04/13] migration: Fix parameter validation Fabiano Rosas
2025-05-15 20:59   ` Peter Xu
2025-05-22 16:39     ` Fabiano Rosas
2025-05-22 17:39       ` Fabiano Rosas
2025-05-26 13:09         ` Peter Xu
2025-05-26 15:41           ` Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 05/13] migration: Reduce a bit of duplication in migration.json Fabiano Rosas
2025-04-14 16:38   ` Daniel P. Berrangé
2025-04-14 17:02     ` Fabiano Rosas
2025-04-16 13:38       ` Markus Armbruster
2025-04-16 14:41         ` Fabiano Rosas
2025-04-17  5:56           ` Markus Armbruster
2025-04-17 18:45   ` Markus Armbruster
2025-04-18  6:40     ` Markus Armbruster
2025-04-11 19:14 ` [RFC PATCH 06/13] migration: Remove the parameters copy during validation Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 07/13] migration: Introduce new MigrationConfig structure Fabiano Rosas
2025-04-18  7:03   ` Markus Armbruster
2025-05-23 13:38     ` Fabiano Rosas
2025-05-26  7:37       ` Markus Armbruster [this message]
2025-04-11 19:14 ` [RFC PATCH 08/13] migration: Replace s->parameters with s->config Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 09/13] migration: Do away with usage of QERR_INVALID_PARAMETER_VALUE Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 10/13] migration: Replace s->capabilities with s->config Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 11/13] migration: Merge parameters and capability checks Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 12/13] [PoC] migration: Add query/set commands for MigrationConfig Fabiano Rosas
2025-05-26  7:51   ` Markus Armbruster
2025-05-27 22:14     ` Fabiano Rosas
2025-04-11 19:14 ` [RFC PATCH 13/13] [PoC] migration: Allow migrate commands to provide the migration config Fabiano Rosas
2025-05-26  8:03   ` Markus Armbruster
2025-05-26 15:10     ` Peter Xu
2025-04-14 16:44 ` [RFC PATCH 00/13] migration: Unify capabilities and parameters Daniel P. Berrangé
2025-04-14 17:12   ` Fabiano Rosas
2025-04-14 17:20     ` Daniel P. Berrangé
2025-04-14 17:40       ` Fabiano Rosas
2025-04-14 19:06         ` Daniel P. Berrangé
2025-05-15 20:21         ` Peter Xu
2025-04-16 13:44   ` Markus Armbruster
2025-04-16 15:00     ` Fabiano Rosas
2025-04-24  9:35       ` Markus Armbruster

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=87cybvbz6f.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=farosas@suse.de \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.