"Daniel P. Berrange" <berra...@redhat.com> writes:

> On Wed, Sep 14, 2016 at 11:30:06AM +0100, Dr. David Alan Gilbert wrote:
>> * Markus Armbruster (arm...@redhat.com) wrote:
>> > "Dr. David Alan Gilbert (git)" <dgilb...@redhat.com> writes:
>> > 
>> > > From: "Dr. David Alan Gilbert" <dgilb...@redhat.com>
>> > >
>> > > This started off as Andreas Färber's implementation from
>> > > March 2015, but after feedback from Paolo morphed into
>> > > using the json output which handles structs reasonably.
>> > >
>> > > Use with qom-list to find the members of an object.
>> > >
>> > > (qemu) qom-get /backend/console[0]/device/vga.rom[0] size
>> > > 65536
>> > > (qemu) qom-get /machine smm
>> > > "auto"
>> > > (qemu) qom-get /machine rtc-time
>> > > {
>> > >     "tm_year": 116,
>> > >     "tm_sec": 0,
>> > >     "tm_hour": 9,
>> > >     "tm_min": 46,
>> > >     "tm_mon": 8,
>> > >     "tm_mday": 6
>> > > }
>> > > (qemu) qom-get /machine frob
>> > > Property '.frob' not found
>> > >
>> > > Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com>
>> > 
>> > Ignorant question: how does qom-set deal with structs?
>> > 
>> > I tried the obvious
>> > 
>> >     (qemu) qom-set /machine rtc-time abc
>> >     Insufficient permission to perform this operation
>> 
>> I don't think it does.
>
> Indeed it can't - qom_set ends up calling object_property_parse which
> uses string-input-visitor to parse the value, which can only handle
> scalars as the magic special case list-of-ints.
>
> To deal with compound properties would really require us to use a
> qdict_crumple + qmp_input_visitor combination, similar to how I've
> made -object and object_add be able to deal with compound properties.

HMP I/O formats are not ABI.  We can use visitors in whatever way we
want, as long as we keep -get and -set consistent.  The sane way to do
that is using the same kind of visitor for both, in its input and output
form, respectively.

Right now, qom-set uses the string input visitor.  As long as it does
that, qom-get should use the string output visitor.  Sadly, this pair of
visitors is quite limited ("does not implement support for visiting QAPI
structs, alternates, null, or arbitrary QTypes").  We can extend it to
cover more, or we can switch to another, less limited pair of visitors.

Can we agree on what to do so we can have qom-get sooner rather than
later?  It doesn't have to be perfect, we can iterate.

Reply via email to