From: Kevin Wolf <kwolf@redhat.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
Max Reitz <mreitz@redhat.com>
Subject: Re: [PATCH 3/3] iotests: Test external snapshot with VM state
Date: Mon, 10 Feb 2020 14:37:08 +0100 [thread overview]
Message-ID: <20200210133708.GC5955@linux.fritz.box> (raw)
In-Reply-To: <20200210123102.GE3250@work-vm>
Am 10.02.2020 um 13:31 hat Dr. David Alan Gilbert geschrieben:
> * Kevin Wolf (kwolf@redhat.com) wrote:
> > Am 02.01.2020 um 14:25 hat Dr. David Alan Gilbert geschrieben:
> > > * Kevin Wolf (kwolf@redhat.com) wrote:
> > > > Am 19.12.2019 um 15:26 hat Max Reitz geschrieben:
> > > > > On 17.12.19 15:59, Kevin Wolf wrote:
> > > > > > This tests creating an external snapshot with VM state (which results in
> > > > > > an active overlay over an inactive backing file, which is also the root
> > > > > > node of an inactive BlockBackend), re-activating the images and
> > > > > > performing some operations to test that the re-activation worked as
> > > > > > intended.
> > > > > >
> > > > > > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > > > >
> > > > > [...]
> > > > >
> > > > > > diff --git a/tests/qemu-iotests/280.out b/tests/qemu-iotests/280.out
> > > > > > new file mode 100644
> > > > > > index 0000000000..5d382faaa8
> > > > > > --- /dev/null
> > > > > > +++ b/tests/qemu-iotests/280.out
> > > > > > @@ -0,0 +1,50 @@
> > > > > > +Formatting 'TEST_DIR/PID-base', fmt=qcow2 size=67108864 cluster_size=65536 lazy_refcounts=off refcount_bits=16
> > > > > > +
> > > > > > +=== Launch VM ===
> > > > > > +Enabling migration QMP events on VM...
> > > > > > +{"return": {}}
> > > > > > +
> > > > > > +=== Migrate to file ===
> > > > > > +{"execute": "migrate", "arguments": {"uri": "exec:cat > /dev/null"}}
> > > > > > +{"return": {}}
> > > > > > +{"data": {"status": "setup"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
> > > > > > +{"data": {"status": "active"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
> > > > > > +{"data": {"status": "completed"}, "event": "MIGRATION", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
> > > > > > +
> > > > > > +VM is now stopped:
> > > > > > +completed
> > > > > > +{"execute": "query-status", "arguments": {}}
> > > > > > +{"return": {"running": false, "singlestep": false, "status": "postmigrate"}}
> > > > >
> > > > > Hmmm, I get a finish-migrate status here (on tmpfs)...
> > > >
> > > > Dave, is it intentional that the "completed" migration event is emitted
> > > > while we are still in finish-migration rather than postmigrate?
> > >
> > > Yes it looks like it; it's that the migration state machine hits
> > > COMPLETED that then _causes_ the runstate transitition to POSTMIGRATE.
> > >
> > > static void migration_iteration_finish(MigrationState *s)
> > > {
> > > /* If we enabled cpu throttling for auto-converge, turn it off. */
> > > cpu_throttle_stop();
> > >
> > > qemu_mutex_lock_iothread();
> > > switch (s->state) {
> > > case MIGRATION_STATUS_COMPLETED:
> > > migration_calculate_complete(s);
> > > runstate_set(RUN_STATE_POSTMIGRATE);
> > > break;
> > >
> > > then there are a bunch of error cases where if it landed in
> > > FAILED/CANCELLED etc then we either restart the VM or also go to
> > > POSTMIGRATE.
> >
> > Yes, I read the code. My question was more if there is a reason why we
> > want things to look like this in the external interface.
> >
> > I just thought that it was confusing that migration is already called
> > completed when it will still change the runstate. But I guess the
> > opposite could be confusing as well (if we're in postmigrate, why should
> > the migration status still change?)
> >
> > > > I guess we could change wait_migration() in qemu-iotests to wait for the
> > > > postmigrate state rather than the "completed" event, but maybe it would
> > > > be better to change the migration code to avoid similar races in other
> > > > QMP clients.
> > >
> > > Given that the migration state machine is driving the runstate state
> > > machine I think it currently makes sense internally; (although I don't
> > > think it's documented to be in that order or tested to be, which we
> > > might want to fix).
> >
> > In any case, I seem to remember that it's inconsistent between source
> > and destination. On one side, the migration status is updated first, on
> > the other side the runstate is updated first.
>
> (Digging through old mails)
>
> That might be partially due to my ed1f30 from 2015 where I move the
> COMPLETED event later - prior to that it was much too early; before
> the network announce and before the bdrv_invalidate_cache_all, and I
> ended up moving it right to the end - it might have been better to leave
> it before the runstate change.
We are working around this in the qemu-iotests now, so I guess I don't
have a pressing need for a consistent interface any more at the moment.
But if having this kind of inconsistency bothers you, feel free to do
something about it anyway. :-)
Kevin
prev parent reply other threads:[~2020-02-10 13:38 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-17 14:59 [PATCH 0/3] block: Fix external snapshot with VM state Kevin Wolf
2019-12-17 14:59 ` [PATCH 1/3] block: Activate recursively even for already active nodes Kevin Wolf
2019-12-18 17:02 ` Kevin Wolf
2019-12-19 12:46 ` Max Reitz
2019-12-17 14:59 ` [PATCH 2/3] hmp: Allow using qdev ID for qemu-io command Kevin Wolf
2019-12-17 14:59 ` [PATCH 3/3] iotests: Test external snapshot with VM state Kevin Wolf
2019-12-19 14:26 ` Max Reitz
2019-12-19 15:47 ` Kevin Wolf
2020-01-02 13:25 ` Dr. David Alan Gilbert
2020-01-06 16:06 ` Kevin Wolf
2020-02-10 12:31 ` Dr. David Alan Gilbert
2020-02-10 13:37 ` Kevin Wolf [this message]
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=20200210133708.GC5955@linux.fritz.box \
--to=kwolf@redhat.com \
--cc=dgilbert@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--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.