From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: Juan Quintela <quintela@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
Leonardo Bras <leobras@redhat.com>,
qemu-block@nongnu.org, Stefan Hajnoczi <stefanha@redhat.com>,
Eric Blake <eblake@redhat.com>, Fam Zheng <fam@euphon.net>,
Thomas Huth <thuth@redhat.com>,
libvir-list@redhat.com
Subject: Re: [RFC 4/6] migration: Deprecate -incoming <uri>
Date: Thu, 22 Jun 2023 17:33:29 +0100 [thread overview]
Message-ID: <ZJR32Vsw+bAyca8/@redhat.com> (raw)
In-Reply-To: <ZJRuw19Rc1LlPQId@x1n>
On Thu, Jun 22, 2023 at 11:54:43AM -0400, Peter Xu wrote:
> I can try to move the todo even higher. Trying to list the initial goals
> here:
>
> - One extra phase of handshake between src/dst (maybe the time to boost
> QEMU_VM_FILE_VERSION) before anything else happens.
>
> - Dest shouldn't need to apply any cap/param, it should get all from src.
> Dest still need to be setup with an URI and that should be all it needs.
>
> - Src shouldn't need to worry on the binary version of dst anymore as long
> as dest qemu supports handshake, because src can fetch it from dest.
I'm not sure that works in general. Even if we have a handshake and
bi-directional comms for live migration, we still haave the save/restore
to file codepath to deal with. The dst QEMU doesn't exist at the time
the save process is done, so we can't add logic to VMSate handling that
assumes knowledge of the dst version at time of serialization.
> - Handshake can always fail gracefully if anything wrong happened, it
> normally should mean dest qemu is not compatible with src's setup (either
> machine, device, or migration configs) for whatever reason. Src should
> be able to get a solid error from dest if so.
>
> - Handshake protocol should always be self-bootstrap-able, it means when we
> change the handshake protocol it should always works with old binaries.
>
> - When src is newer it should be able to know what's missing on dest and
> skip the new bits.
>
> - When dst is newer it should all rely on src (which is older) and it
> should always understand src's language.
I'm not convinced it can reliably self-bootstrap in a backwards
compatible manner, precisely because the current migration stream
has no handshake and only requires a unidirectional channel. I
don't think its possible for QEMU to validate that it has a fully
bi-directional channel, without adding timeouts to its detection
which I think we should strive to avoid.
I don't think we actually need self-bootstrapping anyway.
I think the mgmt app can just indicate the new v2 bi-directional
protocol when issuing the 'migrate' and 'migrate-incoming'
commands. This becomes trivial when Het's refactoring of the
migrate address QAPI is accepted:
https://lists.gnu.org/archive/html/qemu-devel/2023-05/msg04851.html
eg:
{ "execute": "migrate",
"arguments": {
"channels": [ { "channeltype": "main",
"addr": { "transport": "socket", "type": "inet",
"host": "10.12.34.9",
"port": "1050" } } ] } }
note the 'channeltype' parameter here. If we declare the 'main'
refers to the existing migration protocol, then we merely need
to define a new 'channeltype' to use as an indicator for the
v2 migration handshake protocol.
> - All !main channels need to be established later than the handshake - if
> we're going to do this anyway we probably should do it altogether to make
> channels named, so each channel used in migration needs to have a common
> header. Prepare to deprecate the old tricks of channel orderings.
Once the primary channel involves a bi-directional handshake,
we'll trivially ensure ordering - similar to how the existing
code worked fnie in TLS mode which had a bi-directional TLS
handshake.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2023-06-22 16:36 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-12 19:33 [RFC 0/6] Migration deprecated parts Juan Quintela
2023-06-12 19:33 ` [RFC 1/6] migration: skipped field is really obsolete Juan Quintela
2023-06-20 12:01 ` Daniel P. Berrangé
2023-06-22 17:49 ` Juan Quintela
2023-06-12 19:33 ` [RFC 2/6] migration: migrate 'inc' command option is deprecated Juan Quintela
2023-06-20 12:05 ` Daniel P. Berrangé
2023-06-22 18:11 ` Juan Quintela
2023-06-12 19:33 ` [RFC 3/6] migration: migrate 'blk' " Juan Quintela
2023-06-20 12:06 ` Daniel P. Berrangé
2023-06-22 18:12 ` Juan Quintela
2023-06-12 19:33 ` [RFC 4/6] migration: Deprecate -incoming <uri> Juan Quintela
2023-06-12 19:41 ` Peter Xu
2023-06-12 20:51 ` Juan Quintela
2023-06-12 21:19 ` Peter Xu
2023-06-20 12:13 ` Daniel P. Berrangé
2023-06-22 19:34 ` Juan Quintela
2023-06-20 12:10 ` Daniel P. Berrangé
2023-06-20 14:45 ` Peter Xu
2023-06-22 8:28 ` Paolo Bonzini
2023-06-22 8:52 ` Juan Quintela
2023-06-22 9:22 ` Thomas Huth
2023-06-22 15:25 ` Peter Xu
2023-06-22 19:37 ` Juan Quintela
2023-06-22 9:45 ` Paolo Bonzini
2023-06-22 10:01 ` Juan Quintela
2023-06-22 15:24 ` Peter Xu
2023-06-22 16:03 ` Paolo Bonzini
2023-06-22 9:59 ` Daniel P. Berrangé
2023-06-22 15:54 ` Peter Xu
2023-06-22 16:33 ` Daniel P. Berrangé [this message]
2023-06-22 19:20 ` Peter Xu
2023-06-23 7:17 ` Daniel P. Berrangé
2023-06-23 14:34 ` Peter Xu
2023-06-23 8:23 ` Daniel P. Berrangé
2023-06-23 14:51 ` Peter Xu
2023-06-23 15:03 ` Daniel P. Berrangé
2023-06-21 7:08 ` Thomas Huth
2023-06-22 2:22 ` Juan Quintela
2023-06-22 8:30 ` Paolo Bonzini
2023-06-22 18:12 ` Juan Quintela
2023-06-12 19:33 ` [RFC 5/6] migration: Deprecate block migration Juan Quintela
2023-06-21 11:45 ` Stefan Hajnoczi
2023-06-22 18:17 ` Juan Quintela
2023-06-12 19:33 ` [RFC 6/6] migration: Deprecated old compression method Juan Quintela
2023-06-21 7:14 ` Thomas Huth
2023-06-22 19:21 ` Juan Quintela
2023-06-21 10:31 ` Daniel P. Berrangé
2023-06-22 19:32 ` Juan Quintela
2023-06-13 7:48 ` [RFC 0/6] Migration deprecated parts Jiri Denemark
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=ZJR32Vsw+bAyca8/@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=fam@euphon.net \
--cc=leobras@redhat.com \
--cc=libvir-list@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanha@redhat.com \
--cc=thuth@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).