All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <aliguori@us.ibm.com>
To: Eric Blake <eblake@redhat.com>,
	"Daniel P. Berrange" <berrange@redhat.com>
Cc: armbru@redhat.com, qemu-devel@nongnu.org, lcapitulino@redhat.com,
	qiaonuohan@cn.fujitsu.com, pbonzini@redhat.com,
	Amos Kong <akong@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] full introspection support for QMP
Date: Tue, 02 Jul 2013 13:21:13 -0500	[thread overview]
Message-ID: <877gh8j012.fsf@codemonkey.ws> (raw)
In-Reply-To: <51D3035A.1060605@redhat.com>

Eric Blake <eblake@redhat.com> writes:

> On 07/02/2013 09:39 AM, Daniel P. Berrange wrote:
>>>> Maybe I'm being too meta here, but why not just return qapi-schema.json
>>>> as a string and call it as day?
>>>
>>> Because qapi-schema.json requires further parsing.  For example, how is
>>> a client supposed to know that '*foo':'int' means that there is an
>>> argument named 'foo' but it is optional?  The rule of thumb with QMP is
>>> that if you have to post-process JSON output, then the JSON was not
>>> designed correctly.
>> 
>> Arguably that rule of thumb would apply equally to the QEMU
>> build scripts which already parse qapi-schema.json. It could
>> be possible to normalize qapi-schema.json somewhat to remove
>> this 2-stage parsing if we went down this route.
>
> Indeed, I wouldn't mind a one-time pass over qapi-schema.json to make it
> follow a more rigid format if that made it easier to use it as-is with
> less post-processing.  It won't be very nice to backport such a
> conversion, but I don't know how much distros are planning on
> backporting introspection in the first place.

We consume the schema in QEMU.  No reason for us to consume it in a
different format than libvirt.

We're all after the same thing.

Regards,

Anthony Liguori

>
>> 
>> I'm finding it hard to clearly see what the 2 different proposed
>> data formats look like against each other. Can someone give some
>> examples, showing the data that would need to be parsed in each
>> format, for a couple of examples.
>
> My proposal (but not quite what was implemented in _this_ version of
> Amos' patch) has been:
>
> qapi-schema.json:
>
> { 'command': 'add_client',
>   'data': { 'protocol': 'str', 'fdname': 'str', '*skipauth': 'bool',
>             '*tls': 'bool' } }
>
> My proposal:
>
>
> => { "execute": "query-qmp-schema",
>      "arguments": { "name": "add_client" } }
> <= { "return": [
>      { "name": "add_client",
>        "type": "command",
>        "data": [
>          { "name": "protocol",
>            "type": "str" },
>          { "name": "fdname",
>            "type": "str" },
>          { "name": "skipauth",
>            "type": "bool",
>            "optional": true },
>          { "name": "tls",
>            "type": "bool",
>            "optional": true }
>        ] } ] }
>
> Note that one other benefit of breaking out "optional" into its own dict
> member: we are free to expand the dict to add new members, such as a
> '*default':'str' member (present when "optional":true, and with the
> stringized value of the default value used if "name" is not present).
> Of course, to be able to express a default value, we already have to
> modify the syntax stored in qapi-schema.json in the first place, which
> takes us back to the argument of a one-time conversion of the .json file
> to actually use a more formal typing system in the first place.

I really think that we want schema introspection to return the exact
content of qapi-schema.json.

I don't think we need an overly verbose schema though and I don't really
understand why { 'name': 'tls', 'type': 'bool', 'optional': true } is
better than { '*name': 'bool' }

Regards,

Anthony Liguori

>
> -- 
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org

  parent reply	other threads:[~2013-07-02 18:21 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-19 12:24 [Qemu-devel] [PATCH] full introspection support for QMP Amos Kong
2013-06-19 12:49 ` Amos Kong
2013-06-20 10:16   ` Amos Kong
2013-07-02 16:39   ` Eric Blake
2013-06-21  3:20 ` Luiz Capitulino
2013-07-02  8:37   ` Amos Kong
2013-07-02 14:20     ` Luiz Capitulino
2013-07-16 10:52       ` Amos Kong
2013-07-02 14:51 ` Anthony Liguori
2013-07-02 15:28   ` Eric Blake
2013-07-02 15:39     ` Daniel P. Berrange
2013-07-02 16:44       ` Eric Blake
2013-07-02 17:01         ` Paolo Bonzini
2013-07-02 17:06           ` Eric Blake
2013-07-02 18:27             ` Anthony Liguori
2013-07-04  3:54               ` Amos Kong
2013-07-02 18:21         ` Anthony Liguori [this message]
2013-07-02 20:00           ` Paolo Bonzini
2013-07-02 20:08             ` Eric Blake
2013-07-02 20:58             ` Anthony Liguori
2013-07-03  5:52               ` Paolo Bonzini
2013-07-03 12:54                 ` Anthony Liguori
2013-07-03 14:45                   ` Paolo Bonzini
2013-07-03 16:06                     ` Anthony Liguori
2013-07-04  7:53                       ` Paolo Bonzini
2013-07-11 13:37                   ` Amos Kong
2013-07-02 17:06     ` Anthony Liguori
2013-07-02 17:11       ` Eric Blake
2013-07-02 18:28         ` Anthony Liguori
2013-07-03 15:08       ` Kevin Wolf
2013-07-03 15:59         ` Anthony Liguori
2013-07-04  7:42           ` Kevin Wolf
2013-07-04  7:55           ` Paolo Bonzini

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=877gh8j012.fsf@codemonkey.ws \
    --to=aliguori@us.ibm.com \
    --cc=akong@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qiaonuohan@cn.fujitsu.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 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.