From: Het Gala <het.gala@nutanix.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: qemu-devel@nongnu.org, prerna.saxena@nutanix.com,
quintela@redhat.com, dgilbert@redhat.com, pbonzini@redhat.com,
armbru@redhat.com, eblake@redhat.com, manish.mishra@nutanix.com,
aravind.retnakaran@nutanix.com
Subject: Re: [PATCH v2 2/6] migration: Updated QAPI format for 'migrate' qemu monitor command
Date: Thu, 9 Feb 2023 18:41:41 +0530 [thread overview]
Message-ID: <ce476f1c-a2ec-9dd5-c36a-d60bb2a29286@nutanix.com> (raw)
In-Reply-To: <Y+TLJ9Ui790bIR3b@redhat.com>
On 09/02/23 3:59 pm, Daniel P. Berrangé wrote:
> On Wed, Feb 08, 2023 at 09:35:56AM +0000, Het Gala wrote:
>> Existing 'migrate' QAPI design enforces transport mechanism, ip address
>> of destination interface and corresponding port number in the form
>> of a unified string 'uri' parameter for initiating a migration stream.
>> This scheme has a significant flaw in it - double encoding of existing
>> URIs to extract migration info.
>>
>> The current patch maps QAPI uri design onto well defined MigrateChannel
>> struct. This modified QAPI helps in preventing multi-level uri
>> encodings ('uri' parameter is kept for backward compatibility).
>>
>> Suggested-by: Daniel P. Berrange <berrange@redhat.com>
>> Suggested-by: Manish Mishra <manish.mishra@nutanix.com>
>> Suggested-by: Aravind Retnakaran <aravind.retnakaran@nutanix.com>
>> Signed-off-by: Het Gala <het.gala@nutanix.com>
>> ---
>> qapi/migration.json | 131 +++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 129 insertions(+), 2 deletions(-)
>>
>> diff --git a/qapi/migration.json b/qapi/migration.json
>> index c84fa10e86..79acfcfe4e 100644
>> --- a/qapi/migration.json
>> +++ b/qapi/migration.json
>> @@ -1449,12 +1449,108 @@
>> ##
>> { 'command': 'migrate-continue', 'data': {'state': 'MigrationStatus'} }
>>
>> +
>> +##
>> +# @MigrateSocketAddr:
>> +#
>> +# To support different type of socket.
>> +#
>> +# @socket-type: Different type of socket connections.
>> +#
>> +# Since 8.0
>> +##
>> +{ 'struct': 'MigrateSocketAddr',
>> + 'data': {'socket-type': 'SocketAddress' } }
> I'd really like this struct to go away, but if it must exist,
> then call this field 'addr', as I think 'socket-type' is overly
> verbose.
In v3 patchset, I have already changed from 'socket-type' to 'data'.
>> +
>> +##
>> +# @MigrateExecAddr:
>> + #
>> + # Since 8.0
>> + ##
>> +{ 'struct': 'MigrateExecAddr',
>> + 'data' : {'data': ['str'] } }
> Instead of having the field called 'data' lets me more
> descriptive, and perhaps rename the struct too:
>
> { 'struct': 'MigrateCommand',
> 'data' : {'args': ['str'] } }
>
> Any thoughts on whether we should allow for setting env varibles
> too ?
Daniel, won't 'MigrateCommand' be too generic ? I am of the opinion
that, if its related to 'exec' transport, the struct name should reflect
that ?
I did not get your question allowing setting environment variables.
Could you explain it in more detail ?
>> +##
>> +# @MigrateRdmaAddr:
>> +#
>> +# Since 8.0
>> +##
>> +{ 'struct': 'MigrateRdmaAddr',
>> + 'data' : {'data': 'InetSocketAddress' } }
> InetSocketAddress is a plain struct, so I think we can use
> that directly, no ?
Yes, we can use it directly. Just to keep consistency with other
transport mechanisms, I made a separate struct even for rdma.
>> +
>> +##
>> +# @MigrateAddress:
>> +#
>> +# The options available for communication transport mechanisms for migration
>> +#
>> +# Since 8.0
>> +##
>> +{ 'union' : 'MigrateAddress',
>> + 'base' : { 'transport' : 'MigrateTransport'},
>> + 'discriminator' : 'transport',
>> + 'data' : {
>> + 'socket' : 'MigrateSocketAddr',
>> + 'exec' : 'MigrateExecAddr',
>> + 'rdma': 'MigrateRdmaAddr' } }
> Ideally this would be
>
> 'data' : {
> 'socket' : 'SocketAddress',
> 'exec' : 'MigrateCommand',
> 'rdma': 'InetSocketAddress' } }
>
> though the first SocketAddress isn't possible unless it is easy to
> lift the QAPI limitation.
Yes, I agree with you Daniel. If we can fix the first one -
SocketAddress one, can we also allow ['str'] to also be directly
represented by modifying QAPI ?
ex: 'exec': ['str'] ... something like this ?
>> +# -> { "execute": "migrate",
>> +# "arguments": {
>> +# "channel": { "channeltype": "main",
>> +# "addr": { "transport": "socket",
>> +# "socket-type": { "type': "inet',
>> +# "host": "10.12.34.9",
>> +# "port": "1050" } } } } }
>> +# <- { "return": {} }
>> +#
>> +# -> { "execute": "migrate",
>> +# "arguments": {
>> +# "channel": { "channeltype": "main",
>> +# "addr": { "transport": "exec",
>> +# "exec": ["/bin/nc", "-U",
>> +# "/some/sock" ] } } } }
>> +# <- { "return": {} }
>> +#
>> +# -> { "execute": "migrate",
>> +# "arguments": {
>> +# "channel": { "channeltype": "main",
>> +# "addr": { "transport": "rdma",
>> +# "rdma": { "host": "10.12.34.9",
>> +# "port": "1050" } } } } }
>> +# <- { "return": {} }
>> +#
>> ##
>> { 'command': 'migrate',
>> - 'data': {'uri': 'str', '*blk': 'bool', '*inc': 'bool',
>> - '*detach': 'bool', '*resume': 'bool' } }
>> + 'data': {'*uri': 'str', '*channel': 'MigrateChannel', '*blk': 'bool',
>> + '*inc': 'bool', '*detach': 'bool', '*resume': 'bool' } }
> IIRC, the intention was to allow multiple channels to be set in a
> follow up to this series. If so that would require adding yet another
> field as an array of MigrateChannel. Should we just go for the
> array straight away, and just limit it to 1 element as a runtime
> check ? eg
>
> 'data': {'*uri': 'str', '*channels': ['MigrateChannel'], '*blk': 'bool',
> '*inc': 'bool', '*detach': 'bool', '*resume': 'bool' } }
Yes, I got your point Daniel. But I feel it is better to introduce it in
follow up series along with introducing different channel types (main,
data, postcopy). It would then also make sense to introduce a list of
'MigrateChannel'.
> With regards,
> Daniel
Regards,
Het Gala
next prev parent reply other threads:[~2023-02-09 13:13 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-08 9:35 [PATCH v2 0/6] migration: Modified 'migrate' QAPI command for migration Het Gala
2023-02-08 9:35 ` [PATCH v2 1/6] migration: moved hmp_split_at_commma() helper func to qapi-util.c file Het Gala
2023-02-09 12:00 ` Markus Armbruster
2023-02-09 12:12 ` Juan Quintela
2023-02-09 13:58 ` Het Gala
2023-02-09 16:19 ` Markus Armbruster
2023-02-09 13:28 ` Het Gala
2023-02-09 12:02 ` Daniel P. Berrangé
2023-02-09 13:30 ` Het Gala
2023-02-08 9:35 ` [PATCH v2 2/6] migration: Updated QAPI format for 'migrate' qemu monitor command Het Gala
2023-02-08 20:17 ` Eric Blake
2023-02-09 7:57 ` Het Gala
2023-02-09 10:23 ` Daniel P. Berrangé
2023-02-09 13:00 ` Het Gala
2023-02-09 13:38 ` Daniel P. Berrangé
2023-02-10 6:37 ` Het Gala
2023-02-10 10:31 ` Markus Armbruster
2023-02-09 16:26 ` Markus Armbruster
2023-02-10 6:15 ` Het Gala
2023-02-09 10:29 ` Daniel P. Berrangé
2023-02-09 13:11 ` Het Gala [this message]
2023-02-09 13:22 ` Daniel P. Berrangé
2023-02-10 8:24 ` Het Gala
2023-02-10 7:24 ` QAPI unions as branches / unifying struct and union types (was: [PATCH v2 2/6] migration: Updated QAPI format for 'migrate' qemu monitor command) Markus Armbruster
2023-02-10 13:28 ` Het Gala
2023-02-14 10:16 ` QAPI unions as branches / unifying struct and union types Markus Armbruster
2023-02-17 11:18 ` Het Gala
2023-02-17 11:55 ` Daniel P. Berrangé
2023-02-21 9:17 ` Het Gala
2023-02-08 9:35 ` [PATCH v2 3/6] migration: HMP side changes for modified 'migrate' QAPI design Het Gala
2023-02-09 12:05 ` Daniel P. Berrangé
2023-02-09 13:38 ` Het Gala
2023-02-09 14:00 ` Daniel P. Berrangé
2023-02-10 6:44 ` Het Gala
2023-02-08 9:35 ` [PATCH v2 4/6] migration: Avoid multiple parsing of uri in migration code flow Het Gala
2023-02-09 10:40 ` Daniel P. Berrangé
2023-02-09 13:21 ` Het Gala
2023-02-09 12:09 ` Daniel P. Berrangé
2023-02-09 13:54 ` Het Gala
2023-02-09 14:06 ` Daniel P. Berrangé
2023-02-10 7:03 ` Het Gala
2023-02-08 9:35 ` [PATCH v2 5/6] migration: Modified 'migrate-incoming' QAPI and HMP side changes on the destination interface Het Gala
2023-02-08 20:19 ` Eric Blake
2023-02-09 7:59 ` Het Gala
2023-02-09 10:31 ` Daniel P. Berrangé
2023-02-09 13:14 ` Het Gala
2023-02-09 13:25 ` Daniel P. Berrangé
2023-02-08 9:36 ` [PATCH v2 6/6] migration: Established connection for listener sockets on the dest interface Het Gala
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=ce476f1c-a2ec-9dd5-c36a-d60bb2a29286@nutanix.com \
--to=het.gala@nutanix.com \
--cc=aravind.retnakaran@nutanix.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=manish.mishra@nutanix.com \
--cc=pbonzini@redhat.com \
--cc=prerna.saxena@nutanix.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/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).