On Thu, Oct 23, 2025 at 07:47:11AM +0200, Markus Armbruster wrote:
> Peter Xu <[email protected]> writes:
>
> > It wasn't obvious how the resume flag should be used when staring at the
> > QAPI doc. Enrich it to be crystal clear.
> >
> > Reported-by: Markus Armbruster <[email protected]>
> > Signed-off-by: Peter Xu <[email protected]>
> > ---
> > qapi/migration.json | 5 ++++-
> > 1 file changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/qapi/migration.json b/qapi/migration.json
> > index be0f3fcc12..48856078db 100644
> > --- a/qapi/migration.json
> > +++ b/qapi/migration.json
> > @@ -1732,7 +1732,10 @@
> > # @detach: this argument exists only for compatibility reasons and is
> > # ignored by QEMU
> > #
> > -# @resume: resume one paused migration, default "off". (since 3.0)
> > +# @resume: when set, resume one paused postcopy migration, using the new
>
> Scratch "one" unless there can be more than one.
Sure.
>
> > +# URI/channels specified to replace the old/broken channels. The user
> > +# should make sure the migration is in "postcopy-paused" state before
> > +# the resume request. Default "off". (since 3.0)
> > #
> > # Features:
> > #
>
> What happens when migration is not in state "postcopy-paused"?
The QMP command "migrate" with resume=true set will be rejected,
corresponds to:
migrate_prepare():
if (s->state != MIGRATION_STATUS_POSTCOPY_PAUSED) {
error_setg(errp, "Cannot resume if there is no "
"paused migration");
return false;
}
>
> Remind me, how can migration get into and out of this state?
It can happen if any interruption happened during a postcopy migration. So
it needs to be postcopy-active state first, then something wrong happened
e.g. the network is down. Then the channel will break on both sides of
QEMU, and both QEMUs will jump into postcopy-paused.
To get out of the state, one needs to explicitly recover the migration, the
core steps are:
- (optional) Run migrate_recover on dest QEMU to re-establish the ports,
if the old listening ports are not available anymore.
- Run migrate on src QEMU with resume=true flag here to resume the
postcopy migration.
If the recover succeeded, it'll switch from postcopy-paused finally back to
postcopy-active.
Thanks,
--
Peter Xu