Peter Xu <[email protected]> writes: > 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; > }
Makes sense, thanks! I'd suggest something like 'Resume fails unless migration is in "postcopy-paused" state. (default: false, since 3.0)' >> 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, Got it, thanks!
