From: Eric Blake <eblake@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Michael Roth <mdroth@linux.vnet.ibm.com>,
QEMU <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v8 22/35] qapi: Add visit_type_null() visitor
Date: Tue, 5 Jan 2016 09:08:47 -0700 [thread overview]
Message-ID: <568BEA8F.1050900@redhat.com> (raw)
In-Reply-To: <CAJ+F1C+qDyfNCEPavxpbv=Z+MhXSZLXEXp-g-4sDF232Q_hdMw@mail.gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2471 bytes --]
On 01/05/2016 07:05 AM, Marc-André Lureau wrote:
> Hi
>
> On Mon, Dec 21, 2015 at 6:08 PM, Eric Blake <eblake@redhat.com> wrote:
>> Right now, qmp-output-visitor happens to produce a QNull result
>> if nothing is actually visited between the creation of the visitor
>> and the request for the resulting QObject. A stronger protocol
>> would require that a QMP output visit MUST visit something. But
>> to still be able to produce a JSON 'null' output, we need a new
>> visitor function that states our intentions.
>>
>> This patch introduces the new visit_type_null() interface, and
>> a later patch will then wire it up into the qmp output visitor.
>>
>> Signed-off-by: Eric Blake <eblake@redhat.com>
>>
>
> overall looks good to me:
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Just a small remark below,
>
>> + /* Must be provided to visit explicit null values (right now, only the
>> + * dealloc visitor supports this). */
>> + void (*type_null)(Visitor *v, const char *name, Error **errp);
>>
>
> It's not clear to me what you mean by "Must be provided" if only one
> visitor implements it.
>
>> +void visit_type_null(Visitor *v, const char *name, Error **errp)
>> +{
>> + v->type_null(v, name, errp);
>> +}
>
> Shouldn't it be optional then and a if (v->type_null) be added?
No one else (yet) uses a visitor that explicitly visits JSON 'null'. If
someone adds the use of such a visitor, this code will crash at the
attempt to use the missing callback, which will tell the developer to
add the callback. Adding a conditional would paper over the issue and
make it harder to find.
At any rate, it matches existing pattern of 'must be provided if you
plan to visit X' vs. visitors that lack the callback - see visit_type_any().
Maybe I should write a followup patch that implements it for
qmp-input-visitor, as well as a testsuite that proves we can round-trip
a null literal from JSON to QMP back to JSON. And when it comes to
blockdev commands for reopening a device (such as changing its
throttling options), we've toyed with the idea of being able to
explicitly call out to leave an option unchanged (omit 'option'
altogether) vs. reset the option to its default (doable with
'option':null, but requires that we allow parsing explicit null).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2016-01-05 16:08 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-21 17:08 [Qemu-devel] [PATCH v8 00/35] qapi visitor cleanups (post-introspection cleanups subset E) Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 01/35] qobject: Document more shortcomings in our number handling Eric Blake
2016-01-05 14:07 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 02/35] qapi: Avoid use of misnamed DO_UPCAST() Eric Blake
2016-01-05 14:08 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 03/35] qapi: Drop dead dealloc visitor variable Eric Blake
2016-01-05 14:07 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 04/35] hmp: Improve use of qapi visitor Eric Blake
2016-01-05 14:06 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 05/35] vl: " Eric Blake
2016-01-05 14:06 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 06/35] balloon: " Eric Blake
2016-01-05 14:08 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 07/35] qapi: Improve generated event " Eric Blake
2016-01-05 14:07 ` Marc-André Lureau
2016-01-05 15:21 ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 08/35] qapi: Track all failures between visit_start/stop Eric Blake
2016-01-05 14:06 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 09/35] qapi: Prefer type_int64 over type_int in visitors Eric Blake
2016-01-05 14:07 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 10/35] qapi: Make all visitors supply uint64 callbacks Eric Blake
2016-01-05 14:07 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 11/35] qapi: Consolidate visitor small integer callbacks Eric Blake
2016-01-05 14:07 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 12/35] qapi: Don't cast Enum* to int* Eric Blake
2016-01-05 14:06 ` Marc-André Lureau
2016-01-05 15:23 ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 13/35] qom: Use typedef for Visitor Eric Blake
2016-01-05 14:07 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 14/35] qapi: Swap visit_* arguments for consistent 'name' placement Eric Blake
2016-01-05 14:06 ` Marc-André Lureau
2016-01-05 15:32 ` Eric Blake
2016-01-05 22:47 ` Eric Blake
2016-01-06 0:01 ` [Qemu-devel] [PATCH v8 14.5/35] qapi: Update docs to match recent generator changes Eric Blake
2016-01-06 0:16 ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 15/35] qom: Swap 'name' next to visitor in ObjectPropertyAccessor Eric Blake
2015-12-23 16:30 ` Eric Blake
2016-01-05 14:06 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 16/35] qapi: Swap 'name' in visit_* callbacks to match public API Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 17/35] qapi: Drop unused 'kind' for struct/enum visit Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2016-01-06 0:26 ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for list and implicit struct Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2016-01-05 15:58 ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 19/35] qmp: Fix reference-counting of qnull on empty output visit Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2016-01-06 17:42 ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 20/35] qmp: Don't abuse stack to track qmp-output root Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 21/35] qapi: Document visitor interfaces, add assertions Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 22/35] qapi: Add visit_type_null() visitor Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2016-01-05 16:08 ` Eric Blake [this message]
2016-01-06 22:15 ` [Qemu-devel] [PATCH v8 22.5/35] qmp: Support explicit null on input visit Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 23/35] qmp: Tighten output visitor rules Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2016-01-06 22:18 ` Eric Blake
2016-01-06 22:40 ` [Qemu-devel] [PATCH v8 23.5/35] qmp: Tighten output visitor rules, part 2 Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 24/35] spapr_drc: Expose 'null' in qom-get when there is no fdt Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 25/35] qapi: Simplify excess input reporting in input visitors Eric Blake
2016-01-05 14:05 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 26/35] qapi: Add type.is_empty() helper Eric Blake
2016-01-05 14:04 ` Marc-André Lureau
2016-01-05 16:10 ` Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 27/35] qapi: Fix command with named empty argument type Eric Blake
2016-01-05 14:04 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 28/35] qapi: Eliminate empty visit_type_FOO_fields Eric Blake
2016-01-05 14:04 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 29/35] qapi: Canonicalize missing object to :empty Eric Blake
2015-12-23 17:54 ` [Qemu-devel] [PATCH v8 29.5/35] fixup! " Eric Blake
2016-01-05 14:03 ` [Qemu-devel] [PATCH v8 29/35] " Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 30/35] qapi-visit: Unify struct and union visit Eric Blake
2016-01-05 14:03 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 31/35] qapi: Rework deallocation of partial struct Eric Blake
2016-01-05 13:58 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 32/35] qapi: Split visit_end_struct() into pieces Eric Blake
2016-01-05 17:22 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 33/35] qapi: Simplify semantics of visit_next_list() Eric Blake
2016-01-05 17:22 ` Marc-André Lureau
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 34/35] qapi: Change visit_type_FOO() to no longer return partial objects Eric Blake
2016-01-05 17:22 ` Marc-André Lureau
2016-01-05 18:02 ` Eric Blake
2016-01-07 23:02 ` [Qemu-devel] [PATCH v8 34/35] fixup! " Eric Blake
2015-12-21 17:08 ` [Qemu-devel] [PATCH v8 35/35] RFC: qapi: Adjust layout of FooList types Eric Blake
2016-01-05 17:22 ` Marc-André Lureau
2016-01-08 16:45 ` [Qemu-devel] [PATCH] qapi: Update docs to match recent generated changes, part 2 Eric Blake
2016-01-19 9:10 ` [Qemu-devel] [PATCH v8 00/35] qapi visitor cleanups (post-introspection cleanups subset E) Markus Armbruster
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=568BEA8F.1050900@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=mdroth@linux.vnet.ibm.com \
--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 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).