From: Luiz Capitulino <lcapitulino@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: jan.kiszka@siemens.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Handling the O-type
Date: Mon, 21 Jun 2010 12:36:20 -0300 [thread overview]
Message-ID: <20100621123620.20cfd35b@redhat.com> (raw)
In-Reply-To: <m3lja8ere1.fsf@blackfin.pond.sub.org>
On Mon, 21 Jun 2010 10:12:06 +0200
Markus Armbruster <armbru@redhat.com> wrote:
> Luiz Capitulino <lcapitulino@redhat.com> writes:
>
> > On Wed, 02 Jun 2010 09:31:24 +0200
> > Markus Armbruster <armbru@redhat.com> wrote:
> >
> >> Luiz Capitulino <lcapitulino@redhat.com> writes:
> >
> > [...]
> >
> >> > static void check_mandatory_args(const char *cmd_arg_name,
> >> > @@ -4344,6 +4413,9 @@ out:
> >> > * Client argument checking rules:
> >> > *
> >> > * 1. Client must provide all mandatory arguments
> >> > + * 2. Each argument provided by the client must be valid
> >> > + * 3. Each argument provided by the client must have the type expected
> >> > + * by the command
> >> > */
> >> > static int qmp_check_client_args(const mon_cmd_t *cmd, QDict *client_args)
> >> > {
> >> > @@ -4355,7 +4427,10 @@ static int qmp_check_client_args(const mon_cmd_t *cmd, QDict *client_args)
> >> > res.qdict = client_args;
> >> > qdict_iter(cmd_args, check_mandatory_args, &res);
> >> >
> >> > - /* TODO: Check client args type */
> >> > + if (!res.result && !res.skip) {
> >> > + res.qdict = cmd_args;
> >> > + qdict_iter(client_args, check_client_args_type, &res);
> >> > + }
> >>
> >> What if we have both an O-type argument and other arguments? Then the
> >> 'O' makes check_client_args_type() set res.skip, and we duly skip
> >> checking the other arguments here.
> >
> > I was working on this and it seems a bad idea to allow mixing O-type and
> > other monitor types*.
> >
> > The reason is that you can't easily tell if an argument passed by the client
> > is part of the O-type or the monitor type. We could workaround this by trying to
> > ensure that an argument exists only in one of them, but I really feel this will
> > get messy.
> >
> > I think we should disallow mixing O-type with other argument types and maintain
> > the skip trick, ie. skip any checking in the top level if the argument is an
> > O-type one.
>
> If you're proposing "if you have an O-type parameter, then you can have
> any other parameters", then I disagree. That's too big a hammer.
Not sure if this changes what you're trying to say here, but actually what
I'm saying is "if you have an O-type parameter, then argument checking is
up to you".
The best way to fix that is to do the other way around, ie. O-type should
also be checked by the new checker.
> The problem is to match actual arguments to formal parameters.
>
> In HMP, the matching is positional. No ambiguity as long as positions
> are clearly delimited. A positional argument maybe an O-type, and
> within that argument, matching is by option name.
Ok, so the HMP parser can tell when an O-type sequence beings and ends,
right? By looking at the code, I have the impression it does.
In this case, the new checker should do the same. Should be possible, right?
> The big hammer restriction would make it impossible for a command to
> take both positional arguments and named arguments, unless you do the
> named arguments ad hoc instead of with an O-type. Some commands already
> take both positional and named arguments: pci_add, drive_add,
> host_net_add. Okay, those examples aren't exactly pinnacles of human
> interface design. Still, it's an ugly restriction.
>
> Multiple O-types in the same command are probably a bad idea, because
> the user would have to remember which option goes into what positional
> argument.
>
> In QMP, the matching is by parameter name. No ambiguity as long as the
> names are unique. Therefore, all we need to disallow is non-unique
> parameter names.
Yes, if there's an easy way to do that I will do.
> Having an args_type define the same parameter name twice is a
> programming error. It doesn't matter whether the name is right in the
> string, or buried in an O-type.
Sure, but it's error prone.
[...]
> Sooner or later we'll want to switch to a more structured encoding of
> parameters than the args_type string. We might want to revise or ditch
> the use of QemuOptsList then.
Yes, and we have to decide what to do before we get there.
My suggestion is: if it's easy to do the O-type checking in the new checker,
then let's do it. Otherwise let's live with the limitation until we can
properly fix it.
next prev parent reply other threads:[~2010-06-21 15:36 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-01 20:41 [Qemu-devel] [PATCH 0/9]: QMP: Replace client argument checker Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 1/9] QDict: Introduce qdict_get_try_bool() Luiz Capitulino
2010-06-02 6:35 ` Markus Armbruster
2010-06-02 13:53 ` Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 2/9] Monitor: handle optional '-' arg as a bool Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 3/9] QMP: First half of the new argument checking code Luiz Capitulino
2010-06-02 6:59 ` Markus Armbruster
2010-06-02 13:53 ` Luiz Capitulino
2010-06-03 7:35 ` Markus Armbruster
2010-06-02 7:22 ` Markus Armbruster
2010-06-02 13:53 ` Luiz Capitulino
2010-06-02 14:52 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 4/9] QMP: Second " Luiz Capitulino
2010-06-02 7:31 ` Markus Armbruster
2010-06-02 13:54 ` Luiz Capitulino
2010-06-02 14:41 ` Markus Armbruster
2010-06-18 20:30 ` [Qemu-devel] Handling the O-type Luiz Capitulino
2010-06-21 8:12 ` Markus Armbruster
2010-06-21 15:36 ` Luiz Capitulino [this message]
2010-06-21 16:50 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 5/9] QMP: Drop old client argument checker Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 6/9] QMP: check_opts(): Minor cleanup Luiz Capitulino
2010-06-01 20:41 ` [Qemu-devel] [PATCH 7/9] QError: Introduce QERR_QMP_BAD_INPUT_OBJECT_MEMBER Luiz Capitulino
2010-06-02 7:34 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 8/9] QMP: Introduce qmp_check_input_obj() Luiz Capitulino
2010-06-02 7:39 ` Markus Armbruster
2010-06-02 13:55 ` Luiz Capitulino
2010-06-02 14:42 ` Markus Armbruster
2010-06-01 20:41 ` [Qemu-devel] [PATCH 9/9] QMP: Drop old input object checking code Luiz Capitulino
2010-06-02 7:41 ` [Qemu-devel] [PATCH 0/9]: QMP: Replace client argument checker 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=20100621123620.20cfd35b@redhat.com \
--to=lcapitulino@redhat.com \
--cc=armbru@redhat.com \
--cc=jan.kiszka@siemens.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).