From: Eric Blake <eblake@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, "Michael Roth" <mdroth@linux.vnet.ibm.com>,
"Luiz Capitulino" <lcapitulino@redhat.com>,
"Marc-André Lureau" <mlureau@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v15 08/23] monitor: Let generated code validate arguments
Date: Thu, 28 Apr 2016 08:47:16 -0600 [thread overview]
Message-ID: <57222274.1090207@redhat.com> (raw)
In-Reply-To: <87d1p9n7ul.fsf@dusky.pond.sub.org>
[-- Attachment #1: Type: text/plain, Size: 3729 bytes --]
On 04/28/2016 08:09 AM, Markus Armbruster wrote:
> Eric Blake <eblake@redhat.com> writes:
>
>> Having to manually call out the set of expected arguments in
>> qmp-commands.hx, in addition to what is already in *.json,
>> is tedious and prone to error. The only reason we use
>> .args_type is for checking if there is any excess arguments
>> or incorrectly typed arguments during qmp_check_client_args(),
>> but a strict QMP Input visitor also does that checking.
>
> We also use it for completion.
Does scripts/qmp/qmp-shell do completion? It's a script, is it parsing
the .hx file?
I know we do completion for HMP, but this is QMP that I'm tweaking, and
other than qmp-shell, I don't know of any qemu code that wants to do QMP
completion. We have query-qmp-schema that could be used to provide
completion, if needed.
>> and for commands with at least one (possibly-optional) argument,
>> the output changes from:
>>
>> {"execute":"query-command-line-options","arguments":{"a":1}}
>> {"error": {"class": "GenericError", "desc": "Invalid parameter 'a'"}}
>>
QERR_INVALID_PARAMETER
>> to:
>>
>> {"execute":"query-command-line-options","arguments":{"a":1}}
>> {"error": {"class": "GenericError", "desc": "QMP input object member 'a' is unexpected"}}
>
> This error message becomes rather generic. Tolerable. Can we restore
> the old message without trouble?
QERR_QMP_EXTRA_MEMBER
Yes, it's quite easy to switch between the two error message strings by
tweaking the choice of message in qmp_input_check_struct() (at the end
of the series; it's in qmp_input_pop() at this point of the series).
>>
>> - (void)args;
>> -''')
>> + if (args && qdict_size(args)) {
>> + error_setg(errp, "Command '%%s' does not take arguments", "%(name)s");
>> + return;
>> + }
>> +''',
>> + name=name)
>>
>> ret += gen_call(name, arg_type, ret_type)
>>
>
> Works for me.
>
> Naive question: is the special case "no arguments" really necessary
> here? Could we visit the empty struct instead?
If we had an empty struct visitor around. But right now the generator
special-cases ':empty' so that it has no generated functions.
>> @@ -2362,7 +2281,7 @@ EQMP
>>
>> {
>> .name = "query-qmp-schema",
>> - .args_type = "",
>> + .args_type = "",
>> .mhandler.cmd_new = qmp_query_qmp_schema,
>> },
>
> Spurious hunk.
Whoops. I first deleted it, then realized this was one of the few places
that doesn't use qmp_marshal_ so I had to restore it, but restored it
with the wrong whitespace.
>
> Entries defining anything beyond .name and .mhandler.cmd_new:
>
> * device_add, qmp_capabilities
>
> Not QAPIfied, need everything.
>
> * netdev_add, query-qmp-schema
>
> Need .args_type because of 'gen': false.
>
> * client_migrate_info, dump-guest-memory, query-dump, getfd, closefd,
> add-fd, remove-fd, query-fdsets, migrate-set-capabilities
>
> Define .params and/or .help. Does this make any sense?
>
> A comment explaining which members need to be set would be nice.
>
> Have you checked Marc-André's work for overlap? Cc'ing him.
Marc-André QAPIfies device_add and qmp_capabilities, then completely
eliminates qmp-commands.hx. This probably duplicates some of the work
in his queue, but should be fine in the short term. As for whether any
of the other fields are needed or useful, I didn't check (but suspect
that no, they are not needed, again because this is QMP not HMP and that
only HMP 'info cmd' cares).
--
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-04-28 14:47 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-28 0:01 [Qemu-devel] [PATCH v15 00/23] qapi visitor cleanups (post-introspection cleanups subset E) Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 01/23] qapi-visit: Add visitor.type classification Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 02/23] qapi: Guarantee NULL obj on input visitor callback error Eric Blake
2016-04-28 12:24 ` Markus Armbruster
2016-04-28 13:00 ` Eric Blake
2016-04-28 15:41 ` Eric Blake
2016-04-28 16:02 ` [Qemu-devel] [PATCH v15 02A/23] fixup! " Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 03/23] qmp: Drop dead command->type Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 04/23] qmp-input: Clean up stack handling Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 05/23] qapi: Use strict QMP input visitor in more places Eric Blake
2016-04-28 13:06 ` Markus Armbruster
2016-04-28 14:28 ` Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 06/23] qmp-input: Don't consume input when checking has_member Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 07/23] qapi-commands: Wrap argument visit in visit_start_struct Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 08/23] monitor: Let generated code validate arguments Eric Blake
2016-04-28 14:09 ` Markus Armbruster
2016-04-28 14:39 ` Marc-André Lureau
2016-04-28 18:00 ` Markus Armbruster
2016-04-28 18:58 ` Eric Blake
2016-04-28 14:47 ` Eric Blake [this message]
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 09/23] qom: Wrap prop visit in visit_start_struct Eric Blake
2016-04-28 14:46 ` Markus Armbruster
2016-04-28 15:14 ` Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 10/23] qmp-input: Require struct push to visit members of top dict Eric Blake
2016-04-28 15:00 ` Markus Armbruster
2016-04-28 15:04 ` Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 11/23] qmp-input: Refactor when list is advanced Eric Blake
2016-04-28 15:19 ` Markus Armbruster
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 12/23] qapi: Document visitor interfaces, add assertions Eric Blake
2016-04-28 16:34 ` Markus Armbruster
2016-04-28 19:02 ` Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 13/23] tests: Add check-qnull Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 14/23] qapi: Add visit_type_null() visitor Eric Blake
2016-04-28 16:40 ` Markus Armbruster
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 15/23] qmp: Support explicit null during visits Eric Blake
2016-04-28 16:50 ` Markus Armbruster
2016-04-28 19:07 ` Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 16/23] spapr_drc: Expose 'null' in qom-get when there is no fdt Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 17/23] qmp: Add qmp_output_visitor_reset() Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 18/23] qmp: Tighten output visitor rules Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 19/23] qapi: Split visit_end_struct() into pieces Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 20/23] tests/string-input-visitor: Add negative integer tests Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 21/23] qapi: Fix string input visitor handling of invalid list Eric Blake
2016-04-28 17:18 ` Markus Armbruster
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 22/23] qapi: Simplify semantics of visit_next_list() Eric Blake
2016-04-28 15:44 ` Eric Blake
2016-04-28 0:01 ` [Qemu-devel] [PATCH v15 23/23] qapi: Change visit_type_FOO() to no longer return partial objects Eric Blake
2016-04-28 17:42 ` Markus Armbruster
2016-04-28 18:03 ` [Qemu-devel] [PATCH v15 00/23] 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=57222274.1090207@redhat.com \
--to=eblake@redhat.com \
--cc=armbru@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mlureau@redhat.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 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.