All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony PERARD <anthony.perard@citrix.com>
To: "Roger Pau Monné" <roger.pau@citrix.com>
Cc: xen-devel@lists.xenproject.org,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Wei Liu <wei.liu2@citrix.com>
Subject: Re: [PATCH v4 12/32] libxl: Design of an async API to issue QMP commands to QEMUç
Date: Fri, 3 Aug 2018 15:45:39 +0100	[thread overview]
Message-ID: <20180803144539.GG1327@perard.uk.xensource.com> (raw)
In-Reply-To: <20180803135548.kbrx637e2lqcdfuf@mac>

On Fri, Aug 03, 2018 at 03:55:48PM +0200, Roger Pau Monné wrote:
> On Fri, Aug 03, 2018 at 12:18:02PM +0100, Anthony PERARD wrote:
> > On Thu, Aug 02, 2018 at 11:01:43AM +0200, Roger Pau Monné wrote:
> > > On Fri, Jul 27, 2018 at 03:05:54PM +0100, Anthony PERARD wrote:
> > > > +/*
> > > > + * This facility allows a command to be sent to QEMU, and the response to be
> > > > + * handed to a callback function.  Each libxl__ev_qmp handles zero or one
> > > 
> > > Do you really mean 'zero or one' or 'zero or more'?
> > 
> > It is zero or one. But I'm not sur that extra sentence is usefull.
> > Initially, it was followed by "if multiple commands are to be sent
> > concurrently, multiple libxl__ev_qmp's must be used."
> > 
> > But concurency between multiple libxl__ev_qmp isn't possible, the second
> > libxl__ev_qmp created will have to wait until the first one is been
> > disposed of. But sending multiple command can be done, by waiting for
> > the first one to be done, then then the second one. This is why I have
> > the paragraph about "commands can be chained".
> 
> Then maybe you want to add something along the lines:
> 
> "Multiple QMP commands can be queued in a single libxl__ev_qmp
> instance, however they will be dispatched in a serialized fashion.
> Note also that there can only be a single libxl__ev_qmp instance
> active at a time."

That's not true, I don't think adding facilities to queue commands will
be usefull, usually, one will need to wait for a response to the first
command in order to prepare a second one. It is rare in libxl that
several commands can be prepared and queued in advance. User of this API
can do the queuing themself.

As for the single active instance of libxl__ev_qmp, that isn't true
easier, several libxl__ev_qmp can be in the state "Active" at the same
time. But only one can be in the "Connected" state at the same time (in
relation to a single qemu) due to the way qemu handles QMP connections.

> > > > + * outstanding command.
> > > > + *
> > > > + * Commands can be chained, with a same connection. (e.g. "add-fd" will need to
> > >                                     ^ the
> > > > + * be chained to the next command). A libxl__ev_qmp can be reused when the
> > >                                                                      ^ after
> > > > + * callback is been called in order to use the same connection.
> > >                ^ has
> > 
> > Writing "after the callback has been called", would that mean that one
> > would need to wait that the callback returns before reusing the
> > libxl__ev_qmp?
> > 
> > That is what I meant, there is no need to wait for the callback to
> > return before reusing the same libxl__ev_qmp.
> 
> You mean that the same ev_qmp can be reused from the callback itself
> in order to send more QMP requests?

Yes, that's right.

> > > > + *
> > > > + * Only one connection at a time can be made to one QEMU, so avoid keeping a
> > >                                                                ^ to
> > 
> > "To avoid" feels like a how-to, I intended to write what should be done
> > and that it is not an option.
> > 
> > > > + * libxl__ev_qmp Connected for to long and call libxl__ev_qmp_dispose as soon
> > >                     ^ unneeded cap        ^ remove 'and'
> > 
> > The use of the capital was an attempt to say that it is one of the
> > possible states in which libxl__ev_qmp can be.
> 
> Yes, I realized about that later.

:-), good.

> > > > +struct libxl__ev_qmp {
> > > > +    /* caller should include this in their own struct */
> > > > +    /* caller must fill these in, and they must all remain valid */
> > >                                                    ^ no need for 'all'
> > > > +    uint32_t domid;
> > > 
> > > Strictly speaking domid is an uint16_t.
> > 
> > Nothing in libxl agrees with this statement. domid is almost always
> > stored in an uint32_t (sometime an int). There's event a libxl_domid
> > type (I just found out!) which is uint32_t.
> > 
> > Maybe I could try to use libxl_domid, and try to spread it's usage
> > inside libxl.
> 
> Yes, that would be my preference. I didn't know either that there was
> a libxl_domid type.

Well, beside the generated headers (libxl_types.idl), there is only 4
use of it (or 2 functions prototypes).

Thanks,

-- 
Anthony PERARD

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2018-08-03 14:45 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-27 14:05 [PATCH v4 00/32] libxl: Enable save/restore/migration of a restricted QEMU + libxl__ev_qmp_* Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 01/32] libxl_event: Fix DEBUG prints Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 02/32] libxl_qmp: Documentation of the logic of the QMP client Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 03/32] libxl_qmp: Fix use of DEBUG_RECEIVED Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 04/32] libxl_json: fix build with DEBUG_ANSWER Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 05/32] libxl_qmp: Move the buffer realloc to the same scope level as read Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 06/32] libxl_qmp: Add a warning to not trust QEMU Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 07/32] libxl_qmp: Move struct sockaddr_un variable to qmp_open() Anthony PERARD
2018-08-02  8:26   ` Roger Pau Monné
2018-08-20 14:52   ` Wei Liu
2018-07-27 14:05 ` [PATCH v4 08/32] libxl: Add libxl__prepare_sockaddr_un() helper Anthony PERARD
2018-08-02  8:36   ` Roger Pau Monné
2018-08-20 14:56   ` Wei Liu
2018-07-27 14:05 ` [PATCH v4 09/32] libxl_qmp: Remove unused yajl_ctx from handler Anthony PERARD
2018-08-20 14:56   ` Wei Liu
2018-07-27 14:05 ` [PATCH v4 10/32] libxl_json: constify libxl__json_object_to_yajl_gen arguments Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 11/32] libxl_dm: Add libxl__qemu_qmp_path() Anthony PERARD
2018-08-02  8:41   ` Roger Pau Monné
2018-08-20 14:57   ` Wei Liu
2018-07-27 14:05 ` [PATCH v4 12/32] libxl: Design of an async API to issue QMP commands to QEMU Anthony PERARD
2018-08-02  9:01   ` [PATCH v4 12/32] libxl: Design of an async API to issue QMP commands to QEMUç Roger Pau Monné
2018-08-03 11:18     ` Anthony PERARD
2018-08-03 13:55       ` Roger Pau Monné
2018-08-03 14:45         ` Anthony PERARD [this message]
2018-08-03 15:30           ` Roger Pau Monné
2018-07-27 14:05 ` [PATCH v4 13/32] libxl_qmp: Connect to QMP socket Anthony PERARD
2018-08-02  9:35   ` Roger Pau Monné
2018-08-03 13:54     ` Anthony PERARD
2018-08-03 14:03       ` Roger Pau Monné
2018-08-21  8:22         ` Wei Liu
2018-07-27 14:05 ` [PATCH v4 14/32] libxl_qmp: Implement fd callback and read data Anthony PERARD
2018-08-02  9:56   ` Roger Pau Monné
2018-08-03 14:32     ` Anthony PERARD
2018-08-03 15:24       ` Roger Pau Monné
2018-08-06 15:01         ` Anthony PERARD
2018-07-27 14:05 ` [PATCH v4 15/32] libxl_json: Enable yajl_allow_trailing_garbage Anthony PERARD
2018-08-02 10:01   ` Roger Pau Monné
2018-08-21  8:26     ` Wei Liu
2018-07-27 14:05 ` [PATCH v4 16/32] libxl_json: libxl__json_object_to_json Anthony PERARD
2018-08-02 10:10   ` Roger Pau Monné
2018-08-21  8:26   ` Wei Liu
2018-07-27 14:05 ` [PATCH v4 17/32] libxl_qmp: Parse JSON input from QMP Anthony PERARD
2018-08-02 10:25   ` Roger Pau Monné
2018-08-03 15:33     ` Anthony PERARD
2018-08-06 11:17       ` Roger Pau Monné
2018-07-27 14:06 ` [PATCH v4 18/32] libxl_qmp: Separate QMP message generation from qmp_send_prepare Anthony PERARD
2018-08-02 10:34   ` Roger Pau Monné
2018-08-03 15:43     ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 19/32] libxl_qmp: Prepare the command to be sent Anthony PERARD
2018-08-02 10:41   ` Roger Pau Monné
2018-08-03 16:35     ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 20/32] libxl_qmp: Handle write to QMP socket Anthony PERARD
2018-08-02 11:02   ` Roger Pau Monné
2018-08-03 16:50     ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 21/32] libxl_qmp: Simplify qmp_response_type() prototype Anthony PERARD
2018-08-02 11:03   ` Roger Pau Monné
2018-08-21  8:53   ` Wei Liu
2018-07-27 14:06 ` [PATCH v4 22/32] libxl_qmp: Handle messages from QEMU Anthony PERARD
2018-08-02 11:17   ` Roger Pau Monné
2018-08-03 17:25     ` Anthony PERARD
2018-08-06 11:25       ` Roger Pau Monné
2018-08-06 13:14         ` Anthony PERARD
2018-08-06 15:03           ` Roger Pau Monné
2018-08-21  8:58       ` Wei Liu
2018-08-21 12:50         ` Anthony PERARD
2018-08-21 14:56           ` Ian Jackson
2018-07-27 14:06 ` [PATCH v4 23/32] libxl_qmp: Respond to QMP greeting Anthony PERARD
2018-08-02 11:26   ` Roger Pau Monné
2018-08-06 17:41     ` Anthony PERARD
2018-08-21  9:00   ` Wei Liu
2018-08-21 10:51     ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 24/32] libxl_qmp: Disable beautify for QMP generated cmd Anthony PERARD
2018-08-21  9:00   ` Wei Liu
2018-07-27 14:06 ` [PATCH v4 25/32] libxl_exec: Add libxl__spawn_initiate_failure Anthony PERARD
2018-08-02 11:34   ` Roger Pau Monné
2018-08-06 15:58     ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 26/32] libxl_dm: Pre-open QMP socket for QEMU Anthony PERARD
2018-08-02 15:00   ` Roger Pau Monné
2018-07-27 14:06 ` [PATCH v4 27/32] libxl: QEMU startup sync based on QMP Anthony PERARD
2018-08-02 15:06   ` Roger Pau Monné
2018-07-27 14:06 ` [PATCH v4 28/32] libxl_qmp: Store advertised QEMU version in libxl__ev_qmp Anthony PERARD
2018-08-02 15:08   ` Roger Pau Monné
2018-08-06 16:52     ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 29/32] libxl: Change libxl__domain_suspend_device_model() to be async Anthony PERARD
2018-08-02 15:15   ` Roger Pau Monné
2018-07-27 14:06 ` [PATCH v4 30/32] libxl: Re-implement domain_suspend_device_model using libxl__ev_qmp Anthony PERARD
2018-08-02 15:38   ` Roger Pau Monné
2018-08-06 17:07     ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 31/32] libxl_disk: Cut libxl_cdrom_insert into step Anthony PERARD
2018-08-02 15:50   ` Roger Pau Monné
2018-08-06 17:20     ` Anthony PERARD
2018-08-07 14:18       ` Roger Pau Monné
2018-08-07 14:40         ` Anthony PERARD
2018-08-21  9:08           ` Wei Liu
2018-08-21 12:58             ` Anthony PERARD
2018-07-27 14:06 ` [PATCH v4 32/32] libxl_disk: Have libxl_cdrom_insert use libxl__ev_qmp Anthony PERARD

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=20180803144539.GG1327@perard.uk.xensource.com \
    --to=anthony.perard@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=roger.pau@citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.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.