[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v13 6/6] qom: support arbitrary non-scalar prope
From: |
Daniel P. Berrange |
Subject: |
Re: [Qemu-devel] [PATCH v13 6/6] qom: support arbitrary non-scalar properties with -object |
Date: |
Mon, 19 Sep 2016 13:29:51 +0100 |
User-agent: |
Mutt/1.7.0 (2016-08-17) |
On Mon, Sep 19, 2016 at 02:19:19PM +0200, Paolo Bonzini wrote:
>
>
> On 19/09/2016 14:12, Daniel P. Berrange wrote:
> > On Mon, Sep 19, 2016 at 12:58:30PM +0100, Daniel P. Berrange wrote:
> >> The current -object command line syntax only allows for
> >> creation of objects with scalar properties, or a list
> >> with a fixed scalar element type. Objects which have
> >> properties that are represented as structs in the QAPI
> >> schema cannot be created using -object.
> >>
> >> This is a design limitation of the way the OptsVisitor
> >> is written. It simply iterates over the QemuOpts values
> >> as a flat list. The support for lists is enabled by
> >> allowing the same key to be repeated in the opts string.
> >>
> >> It is not practical to extend the OptsVisitor to support
> >> more complex data structures while also maintaining
> >> the existing list handling behaviour that is relied upon
> >> by other areas of QEMU.
> >>
> >> Fortunately there is no existing object that implements
> >> the UserCreatable interface that relies on the list
> >> handling behaviour, so it is possible to swap out the
> >> OptsVisitor for a different visitor implementation, so
> >> -object supports non-scalar properties, thus leaving
> >> other users of OptsVisitor unaffected.
> >
> > Urgh, I've just discovered that this is not in fact true.
> >
> > The 'memory-backend' object type uses uint16List which
> > has the hacky list syntax
> >
> > -object memory-backend-ram,\
> > id=ram-node2,size=24578621440,policy=bind,\
> > host-nodes=1-2,host-nodes=5,host-nodes=7,
> >
> > So I'll need to figure out a way to preserve this syntax...
>
> Is there a usecase for qdict_crumple without the following
> de-stringification pass? If not, qdict_crumple could use a
> StringInputVisitor on the values directly.
I'm not sure I understand how that would help and in any case, the
string-input-visitor itself is incapable of dealing with compound
properties. It too could/should be ultimately replaced by the
qobject-input-visitor combined with a pre-processing step to
turn the input string into a qdict.
The problem I'm facing with the above scenario though occurs
before we get anywhere near the visitors, or the crumple step.
When qemu_opts_to_qdict() turns QemuOpts into QDict, it looses
repeated options. So given a command line
-object memory-backend-ram,\
id=ram-node2,size=24578621440,policy=bind,\
host-nodes=1-2,host-nodes=5,host-nodes=7,
we're getting an initial QDict containing
type=memory-backend-ram
id=ram-node2
size=24578621440
policy=bind
host-nodes=7
What I need to do is make qemu_opts_to_qdict more intelligent
so that if it sees repeated strings, it inserts them into the
qdict using list index style. eg, the QemuOpts -> QDict
conversion should have at minimum given us
type=memory-backend-ram
id=ram-node2
size=24578621440
policy=bind
host-nodes.0=1-2
host-nodes.1=5
host-nodes.2=7
although even then there's some magic in the range value seen there. I'm
unclear on whether we should try to deal with the range "1-2" in the
qemu_opts_to_qdict() method, the qdict_crumple() method or the qobject
input visitor code for parsing ints.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
- [Qemu-devel] [PATCH v13 2/6] option: make parse_option_bool/number non-static, (continued)
- [Qemu-devel] [PATCH v13 2/6] option: make parse_option_bool/number non-static, Daniel P. Berrange, 2016/09/19
- [Qemu-devel] [PATCH v13 1/6] qdict: implement a qdict_crumple method for un-flattening a dict, Daniel P. Berrange, 2016/09/19
- [Qemu-devel] [PATCH v13 3/6] qapi: rename QmpInputVisitor to QObjectInputVisitor, Daniel P. Berrange, 2016/09/19
- [Qemu-devel] [PATCH v13 5/6] qapi: add a QObjectInputVisitor that does string conversion, Daniel P. Berrange, 2016/09/19
- [Qemu-devel] [PATCH v13 4/6] qapi: rename QmpOutputVisitor to QObjectOutputVisitor, Daniel P. Berrange, 2016/09/19
- [Qemu-devel] [PATCH v13 6/6] qom: support arbitrary non-scalar properties with -object, Daniel P. Berrange, 2016/09/19
- Re: [Qemu-devel] [PATCH v13 6/6] qom: support arbitrary non-scalar properties with -object, Kevin Wolf, 2016/09/23
- Re: [Qemu-devel] [PATCH v13 6/6] qom: support arbitrary non-scalar properties with -object, Daniel P. Berrange, 2016/09/23
- Re: [Qemu-devel] [PATCH v13 6/6] qom: support arbitrary non-scalar properties with -object, Kevin Wolf, 2016/09/23