[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v8 14/16] net: Complete qapi-fication of netdev_
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v8 14/16] net: Complete qapi-fication of netdev_add |
Date: |
Thu, 07 Jul 2016 14:57:05 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Eric Blake <address@hidden> writes:
> We finally have all the required pieces for doing a type-safe
> representation of netdev_add as a flat union, where the
> discriminator 'type' now selects which additional members may
> appear in the "arguments" JSON object sent over QMP, and exposes
> those types through introspection, and without breaking command
> line parsing.
>
> Inline the function netdev_add() into its lone remaining caller.
>
> There are a few places where the QMP 'netdev_add' command is now
> more strict: anywhere that the QAPI lists an integer member, we
> now require a strict JSON integer (previously, we allowed both
> integers and strings, because the conversion from QMP to QemuOpts
> back to QObject collapsed them into integers). For example,
> pre-patch, both of these examples succeed, but post-patch, the
> second example fails:
>
> {'execute':'netdev_add',
> 'arguments':{'id':'net1', 'type':'hubport', 'hubid':1}}
> {"return": {}}
> {'execute':'netdev_add',
> 'arguments':{'id':'net2', 'type':'hubport', 'hubid':"2"}}
> {"error": {"class": "GenericError", "desc": "Invalid parameter type for
> 'hubid', expected: integer"}}
Needs to be covered in release notes.
> If that turns out to be problematic, we could resolve the problem
> by either adding a loose parsing mode to qmp-input-visitor (teaching
> it to accept a string encoding of an integer in place of an actual
> integer), or by using QAPI alternates. But that work should be
> in followup patches, if at all.
The sloppy typing is an accidental misfeature that is at odds with QMP's
design. As far as I can tell, it's not documented anywhere. But lots
of things aren't documented anywhere; the questions is whether they're
used.
If we find we must keep netdev_add misfeature-compatible, I want it
deprecated in favor of a new command that adheres to the QMP design.
Do we have to keep it misfeature-compatible proactively? How
comfortable are we with "wait see whether anything breaks" here?
The scenarios I want to avoid are "OMG, hold the release while we
improvise a misfeature-compatibility hack", and "OMG, we need a stable
release for misfeature compatibility a.s.a.p."
I'm okay with breaking misfeature compatibility in this patch, and
unbreak it separately if necessary.
> In qmp_netdev_add(), we still have to create a QemuOpts object
> so that qmp_netdev_del() will be able to remove a hotplugged
> network device; but the opts->head remains empty since we now
> manage all parsing through the QAPI object rather than QemuOpts.
This use of QemuOpts as a network backend directory has always been
somewhat questionable. More so now the QemuOpts is empty. But it's not
this patch's business.
> Signed-off-by: Eric Blake <address@hidden>
- [Qemu-devel] [PATCH for-2.7 v8 00/16] qapi netdev_add introspection (post-introspection cleanups subset F), Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 02/16] qapi: Require all branches of flat union enum to be covered, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 03/16] qapi: Hide tag_name data member of variants, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 05/16] qapi: Drop useless gen_err_check(), Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 04/16] qapi: Add type.is_empty() helper, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 01/16] net: use Netdev instead of NetClientOptions in client init, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 06/16] qapi-event: Simplify visit of non-implicit data, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 13/16] net: Use correct type for bool flag, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 14/16] net: Complete qapi-fication of netdev_add, Eric Blake, 2016/07/02
- Re: [Qemu-devel] [PATCH v8 14/16] net: Complete qapi-fication of netdev_add,
Markus Armbruster <=
- [Qemu-devel] [PATCH v8 15/16] qapi: Allow anonymous branch types in flat union, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 10/16] block: Simplify drive-mirror, Eric Blake, 2016/07/02
- [Qemu-devel] [PATCH v8 08/16] qapi: Implement boxed types for commands/events, Eric Blake, 2016/07/02
[Qemu-devel] [PATCH v8 07/16] qapi: Plumb in 'box' to qapi generator lower levels, Eric Blake, 2016/07/02