[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v4 04/19] qapi: Document type-safety considerati
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH v4 04/19] qapi: Document type-safety considerations |
Date: |
Mon, 22 Sep 2014 10:53:25 -0600 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.1.0 |
On 09/22/2014 06:37 AM, Markus Armbruster wrote:
> Eric Blake <address@hidden> writes:
>
>> === Union types ===
>>
>> +Usage: { 'union': 'str', 'data': 'dict', '*base': 'complex-type-name',
>> + '*discriminator': 'enum-type-name' }
>> +or: { 'union': 'str', 'data': 'dict', 'discriminator': {} }
>> +
>
> Suggest to split usage into simple union, flat union and anonymous
> union, like this:
>
> Usage: { 'union': 'str', 'data': 'dict', '*base': 'complex-type-name' }
^ simple
> or: { 'union': 'str', 'data': 'dict', 'base': 'complex-type-name',
> '*discriminator': 'enum-type-name' }
^ flat
> or: { 'union': 'str', 'data': 'dict', 'discriminator': {} }
^ anonymous
Except that someday, I'd like to have:
{ 'union': str', 'data': 'dict', 'discriminator': 'enum-type-name' }
which, when compared with the simple and flat versions, means that base
and discriminator are equally optional. But you are right that we don't
have that form yet, and that the code currently requires that if base is
specified, then discriminator is non-optional. I'll have to tweak this.
>> +
>> +In rare cases, QAPI cannot express a type-safe representation of a
>> +corresponding QMP command. In these cases, if the command expression
>> +includes the key 'gen' with value 'no', then the 'data' or 'returns'
>
> The implementation actually ignores the value of 'gen', but specifying
> it must be 'no' doesn't hurt.
Actually, see patch 14/19 later in the series, where I fix the code to
enforce that it must be 'no' :)
>
>> +member that intends to bypass generated type-safety and do its own
>> +manual validation should use '**' rather than a valid type name.
>> +Please try to avoid adding new commands that rely on this, and instead
>> +use type-safe unions. For an example of bypass usage:
>> +
>> + { 'command': 'netdev_add',
>> + 'data': {'type': 'str', 'id': 'str', '*props': '**'},
>> + 'gen': 'no' }
>> +
>> +Normally, the QAPI schema is used to describe synchronous exchanges,
>> +where a response is expected. But in some cases, the action of a
>> +command is expected to change state in a way that a successful
>> +response is not possible (a failure message still returns a
>> +dictionary). In this case, the command expression should include the
>> +optional key 'success-response' with value 'no'.
>
> Learned something new here.
To date, only qga uses this form.
>> +
>> +Events are defined with the keyword 'event'. It is not allowed to
>> +name an event 'MAX', since the generator also produces a C enumeration
>> +of all event names with a generated _MAX value at the end.
>
> One of the several places where the generator can thoughtlessly produce
> clashing identifiers. You're documenting one of them, which is an
> improvement of sorts.
I also enhance things later in the series to enforce this documentation :)
>
> Major improvement, thank you very much!
I've trimmed your other comments (such as suggested line breaks) because
I agree with them, and will incorporate them into either v5 (if the
series needs respinning) or a followup patch (if this is the only patch
that needs improvement).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [PATCH v4 03/19] qapi: Update docs given recent event, spacing fixes, (continued)
- [Qemu-devel] [PATCH v4 04/19] qapi: Document type-safety considerations, Eric Blake, 2014/09/19
- [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Eric Blake, 2014/09/19
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Markus Armbruster, 2014/09/23
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Eric Blake, 2014/09/23
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Markus Armbruster, 2014/09/24
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Kevin Wolf, 2014/09/24
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Markus Armbruster, 2014/09/24
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Markus Armbruster, 2014/09/26
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Kevin Wolf, 2014/09/26
- Re: [Qemu-devel] [PATCH v4 08/19] qapi: Better error messages for bad expressions, Markus Armbruster, 2014/09/26
[Qemu-devel] [PATCH v4 09/19] qapi: Add tests of redefined expressions, Eric Blake, 2014/09/19