qemu-devel
[Top][All Lists]
Advanced

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

Re: QMP qom-get feels useless for child properties


From: Paolo Bonzini
Subject: Re: QMP qom-get feels useless for child properties
Date: Fri, 29 May 2020 10:47:42 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0

On 29/05/20 08:57, Markus Armbruster wrote:
> QMP qom-get for a link property returns the canonical path of the link's
> target:
> 
>     $ socat "READLINE,history=$HOME/.qmp_history,prompt=QMP> " 
> UNIX-CONNECT:$HOME/work/images/test-qmp
>     [...]
>     QMP> {"execute": "qom-get", "arguments": {"path": "/machine", "property": 
> "acpi-device"}}
>     {"return": "/machine/unattached/device[23]"}
> 
> This makes sense.
> 
> Fine print: it returns "" for dangling links, I think.  See
> object_get_link_property().
> 
> qom-get behaves the same for child properties:
> 
>     QMP> {"execute": "qom-get", "arguments": {"path": "/machine", "property": 
> "peripheral"}}
>     {"return": "/machine/peripheral"}
> 
> This surprised me.  I'm writing to the list in the hope of saving
> somebody else the surprise and the time to figure out what's going on
> here.
> 
> Returning the canonical path feels useless here.  The only explanation
> that comes to my mind is we have to return something, the canonical path
> is something, therefore we have to return it ;)

It is useful in that the caller need not care whether a property is a
child or a link.  If a property has object type, it consistently returns
a canonical path.

> You either just know that /machine/peripheral is a child property, or
> you recognize the pattern "type": "child<T>" in output of qom-list one
> level up:
> 
>     QMP>{"execute":"qom-list","arguments":{"path":"/machine"}}
>     {"return": [... {"name": "peripheral", "type": "child<container>"}, ...]}
> 
> I believe ad hoc matching of type strings is necessary in other cases to
> make sense of qom-get output.
> 
> I wish QOM introspection described types like QAPI introspection does.

At least in theory all QOM property types should be one of child<>,
link<> or a QAPI type.  Perhaps it should have been just the QOM type
without the child<> and link<> annotations?  Can we change that
retroactively?  (We probably can).

Paolo




reply via email to

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