qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH 00/11] qapi changes in preparation for block


From: Laszlo Ersek
Subject: Re: [Qemu-devel] [RFC PATCH 00/11] qapi changes in preparation for blockdev-add
Date: Fri, 12 Jul 2013 11:55:26 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130621 Thunderbird/17.0.7

On 07/09/13 11:53, Kevin Wolf wrote:
> The goal of this series is to make QAPI ready to handle mostly unions in a 
> less
> verbose way so that a future -blockdev command line option can be a
> direct mapping of the structure used by a blockdev-add QMP command. This
> series implements everything that I think is needed for this on the QAPI
> side. The block layer side is still lacking, but good enough that I
> could actually add a block device using the new command; the problem is
> here mostly that many -drive options aren't supported yet.

Apologies for arriving late to the party...

Do you think this could be handled by OptsVisitor? See the message part
of commit eb7ee2cb. (Directly following commits in the history
demonstrate use of the visitor.)

Using OptsVisitor, you'd receive a flat structure, specific to the
discriminator value selected. You'd have to transform that flat struct
into the qapi object tree that blockdev-add already takes; the benefit
is that the usual qemu-opt fishing and basic syntax validation would be
covered.

Your requirements are probably more complex than what OptsVisitor can
handle, but I'd like you to read the commit message and say, "yes, this
is insufficient for me". :)

Thanks,
Laszlo

> 
> To give you an idea of what the interface looks like in the end, this is
> what you can pass now in theory (the block layer just won't like the
> read-only option and error out...):
> 
> { "execute": "blockdev-add",
>   "arguments": {
>       "options": {
>         "driver": "qcow2",
>         "read-only": true,
>         "lazy-refcounts": true,
>         "file": {
>             "driver": "file",
>             "read-only": false,
>             "filename": "/home/kwolf/images/hd.img"
>         }
>       }
>     }
>   }
> 
> Kevin Wolf (11):
>   qapi-types.py: Split off generate_struct_fields()
>   qapi-types.py: Implement 'base' for unions
>   qapi-visit.py: Split off generate_visit_struct_fields()
>   qapi-visit.py: Implement 'base' for unions
>   qapi: Add visitor for implicit structs
>   qapi: Flat unions with arbitrary discriminator
>   qapi: Add consume argument to qmp_input_get_object()
>   qapi: Anonymous unions
>   Implement qdict_flatten()
>   block: Allow "driver" option on the top level
>   [WIP] block: Implement 'blockdev-add' QMP command
> 
>  block.c                     |   7 ++
>  blockdev.c                  |  52 ++++++++++---
>  include/qapi/qmp/qdict.h    |   1 +
>  include/qapi/qmp/qobject.h  |   1 +
>  include/qapi/visitor-impl.h |   6 ++
>  include/qapi/visitor.h      |   6 ++
>  qapi-schema.json            |  29 +++++++
>  qapi/qapi-visit-core.c      |  25 +++++++
>  qapi/qmp-input-visitor.c    |  47 +++++++++---
>  qmp-commands.hx             |   6 ++
>  qobject/qdict.c             |  47 ++++++++++++
>  qobject/qjson.c             |   2 +
>  scripts/qapi-types.py       |  83 ++++++++++++++++++--
>  scripts/qapi-visit.py       | 179 
> ++++++++++++++++++++++++++++++++++++--------
>  scripts/qapi.py             |  28 +++++++
>  15 files changed, 459 insertions(+), 60 deletions(-)
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]