qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Eric Blake <eblake@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>, Fam Zheng <famz@redhat.com>,
	Juan Quintela <quintela@redhat.com>, QEMU <qemu-devel@nongnu.org>,
	Michael Roth <mdroth@linux.vnet.ibm.com>,
	Markus Armbruster <armbru@redhat.com>,
	Stefan Hajnoczi <shajnocz@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v8 14/23] monitor: separate QMP parser and dispatcher
Date: Thu, 22 Mar 2018 13:00:02 +0800	[thread overview]
Message-ID: <20180322050002.GF32362@xz-mi> (raw)
In-Reply-To: <CAJ+F1C+mcAxMVGXzYhbOoh932rKkEue22rk0ApqMHuOqbDDNGg@mail.gmail.com>

On Thu, Mar 22, 2018 at 12:32:36AM +0100, Marc-André Lureau wrote:
> Hi
> 
> On Wed, Mar 21, 2018 at 9:33 PM, Eric Blake <eblake@redhat.com> wrote:
> > On 03/21/2018 03:09 PM, Dr. David Alan Gilbert wrote:
> >
> >>>>
> >>>> So the parsing job and the dispatching job is isolated now.  It gives us
> >>>> a chance in following up patches to totally move the parser outside.
> >>>>
> >>>> The isolation is done using one QEMUBH. Only one dispatcher QEMUBH is
> >>>> used for all the monitors.
> >>>>
> >
> >>>> +
> >>>> +    /*
> >>>> +     * If OOB is not enabled on current monitor, we'll emulate the old
> >>>> +     * behavior that we won't process current monitor any more until
> >>>> +     * it is responded.  This helps make sure that as long as OOB is
> >>>> +     * not enabled, the server will never drop any command.
> >>>> +     */
> >>>> +    if (!qmp_oob_enabled(mon)) {
> >>>> +        monitor_suspend(mon);
> >>>> +        req_obj->need_resume = true;
> >>>> +    }
> >>>> +
> >>>> +    /*
> >>>> +     * Put the request to the end of queue so that requests will be
> >>>> +     * handled in time order.  Ownership for req_obj, req, id,
> >>>
> >>>
> >>> I think the order is not respected if subsequent messages have errors
> >>> (in either json parsing, dispatch_check_obj, oob_check). So if I
> >>> enable oob, and queue a few command, then send a bad command/message,
> >>> I won't be able to tell for which command.
> >>
> >>
> >> Doesn't OOB insist on having an ID field with the command?
> >
> >
> > OOB insists on an id field - but there is the situation that SOME errors
> > occur even before the id field has been encountered (for example, if you
> > send non-JSON, the parser gets all confused - it has to emit SOME error, but
> > that error can't refer to an id because it wasn't able to parse one yet).  A
> > well-formed client will never do this, but we MUST be robust even in the
> > face of a malicious client (or even a well-intentioned client but a noisy
> > communication medium that manages to corrupt bytes). I'm not sure if the
> > testsuite adequately covers what happens in this scenario.  Peter?
> 
> I think a solution would be to queue the error reply (the reply only)
> instead of replying directly.

IMHO this should be fine.

Note that to be compatible with existing QMP we'll suspend the monitor
if OOB is not enabled in the session on receiving the first command.
It means even if another faulty command is sent after the good one,
it'll not be read by QMP parser until the first one is fully complete.

Since I'm working on some test patches after all, I'll try to add a
test case for this to see whether Eric would like them too.

> 
> Another problem I see with the current solution is that pending
> commands are not discarded when a new client connects. So I suppose a
> new client can receive replies for commands it didn't make, with id
> namespace that may conflict with its own. breaking ordering etc. A
> possible solution is to mark the pending request to not send the reply
> somehow?

Yeah, to be simpler - maybe we can even drop the commands that have
not yet been dispatched?

I'll treat a command as "complete" only until the client receives a
response, otherwise if a client disconnects before receiving a reply
then I think it's fine the behavior is undefined - IMHO it's fine
either the QMP server executes the command or not (and no matter what,
we drop the responses).  Would that work?

Thanks,

-- 
Peter Xu

  reply	other threads:[~2018-03-22  5:00 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-09  8:59 [Qemu-devel] [PATCH v8 00/23] QMP: out-of-band (OOB) execution support Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 01/23] docs: update QMP documents for OOB commands Peter Xu
2018-03-09 17:13   ` Eric Blake
2018-03-12  3:32     ` Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 02/23] qobject: introduce qstring_get_try_str() Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 03/23] qobject: introduce qobject_get_try_str() Peter Xu
2018-03-09 20:10   ` Eric Blake
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 04/23] qobject: let object_property_get_str() use new API Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 05/23] monitor: move skip_flush into monitor_data_init Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 06/23] monitor: move the cur_mon hack deeper for QMP Peter Xu
2018-03-10 23:13   ` Eric Blake
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 07/23] monitor: unify global init Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 08/23] monitor: let mon_list be tail queue Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 09/23] monitor: allow using IO thread for parsing Peter Xu
2018-03-10 23:19   ` Eric Blake
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 10/23] qmp: introduce QMPCapability Peter Xu
2018-03-11  1:25   ` Eric Blake
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 11/23] monitor: introduce monitor_qmp_respond() Peter Xu
2018-03-11  1:35   ` Eric Blake
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 12/23] monitor: let suspend_cnt be thread safe Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 13/23] monitor: let suspend/resume work even with QMPs Peter Xu
2018-03-11  1:53   ` Eric Blake
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 14/23] monitor: separate QMP parser and dispatcher Peter Xu
2018-03-11  2:00   ` Eric Blake
2018-03-21 18:01   ` Marc-André Lureau
2018-03-21 20:09     ` Dr. David Alan Gilbert
2018-03-21 20:33       ` Eric Blake
2018-03-21 23:32         ` Marc-André Lureau
2018-03-22  5:00           ` Peter Xu [this message]
2018-03-22 13:24             ` Eric Blake
2018-03-23 16:18   ` Marc-André Lureau
2018-03-26  8:07     ` Peter Xu
2018-03-26  8:33       ` Marc-André Lureau
2018-03-26  9:08         ` Peter Xu
2018-03-26  9:46           ` Marc-André Lureau
2018-03-28  4:02             ` Peter Xu
2018-04-04 13:58               ` Marc-André Lureau
2018-04-08  3:02                 ` Peter Xu
2018-04-09  9:19                   ` Marc-André Lureau
2018-04-10  7:15                     ` Peter Xu
2018-04-10  7:56                       ` Peter Xu
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 15/23] qmp: add new event "command-dropped" Peter Xu
2018-03-11  2:03   ` Eric Blake
2018-03-09  8:59 ` [Qemu-devel] [PATCH v8 16/23] monitor: send event when command queue full Peter Xu
2018-03-11  2:11   ` Eric Blake
2018-03-09  9:00 ` [Qemu-devel] [PATCH v8 17/23] qapi: introduce new cmd option "allow-oob" Peter Xu
2018-03-11  2:27   ` Eric Blake
2018-03-12  3:35     ` Peter Xu
2018-03-09  9:00 ` [Qemu-devel] [PATCH v8 18/23] qmp: support out-of-band (oob) execution Peter Xu
2018-03-11  2:37   ` Eric Blake
2018-03-22 10:22   ` Marc-André Lureau
2018-03-23  5:18     ` Peter Xu
2018-03-23 10:03       ` Marc-André Lureau
2018-03-09  9:00 ` [Qemu-devel] [PATCH v8 19/23] qmp: isolate responses into io thread Peter Xu
2018-03-22 12:00   ` Marc-André Lureau
2018-03-23  5:50     ` Peter Xu
2018-03-23 10:00       ` Marc-André Lureau
2018-03-09  9:00 ` [Qemu-devel] [PATCH v8 20/23] monitor: enable IO thread for (qmp & !mux) typed Peter Xu
2018-03-23 12:10   ` Christian Borntraeger
2018-03-23 12:25     ` Peter Xu
2018-03-23 12:44       ` Christian Borntraeger
2018-03-23 13:01         ` Peter Xu
2018-03-23 13:21           ` Peter Maydell
2018-03-23 13:23           ` Christian Borntraeger
2018-03-23 13:39             ` Peter Xu
2018-03-09  9:00 ` [Qemu-devel] [PATCH v8 21/23] qmp: add command "x-oob-test" Peter Xu
2018-03-11  2:42   ` Eric Blake
2018-03-09  9:00 ` [Qemu-devel] [PATCH v8 22/23] tests: qmp-test: verify command batching Peter Xu
2018-03-11  2:45   ` Eric Blake
2018-03-12  3:43     ` Peter Xu
2018-03-09  9:00 ` [Qemu-devel] [PATCH v8 23/23] tests: qmp-test: add oob test Peter Xu
2018-03-11  2:49   ` Eric Blake
2018-03-12  3:56     ` Peter Xu
2018-03-11  2:59 ` [Qemu-devel] [PATCH v8 00/23] QMP: out-of-band (OOB) execution support Eric Blake
2018-03-12  4:14   ` Peter Xu
2018-03-12 12:01 ` Eric Blake
2018-03-12 12:55   ` Daniel P. Berrangé
2018-03-13  2:06     ` Peter Xu

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=20180322050002.GF32362@xz-mi \
    --to=peterx@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=marcandre.lureau@gmail.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=shajnocz@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).