[libvirt] [Qemu-devel] [PATCH v3 2/6] qmp: make "qom-list-properties" show initial property values
Markus Armbruster
armbru at redhat.com
Mon May 27 18:15:16 UTC 2019
Igor Mammedov <imammedo at redhat.com> writes:
> Add in the command output object's property values right after creation
> (i.e. state of the object returned by object_new() or equivalent).
>
> Follow up patch will add machine property 'numa-mem-supported', which
> would allow mgmt to introspect which machine types (versions) still
> support legacy "-numa mem=FOO" CLI option and which don't and require
> alternative '-numa memdev' option being used.
I'll have to study that patch to figure out what exactly the use case
is.
> Signed-off-by: Igor Mammedov <imammedo at redhat.com>
> ---
> qapi/misc.json | 5 ++++-
> qmp.c | 5 +++++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/qapi/misc.json b/qapi/misc.json
> index 8b3ca4f..e333285 100644
> --- a/qapi/misc.json
> +++ b/qapi/misc.json
> @@ -1365,10 +1365,13 @@
> #
> # @description: if specified, the description of the property.
> #
> +# @default: initial property value.
> +#
> # Since: 1.2
> ##
> { 'struct': 'ObjectPropertyInfo',
> - 'data': { 'name': 'str', 'type': 'str', '*description': 'str' } }
> + 'data': { 'name': 'str', 'type': 'str', '*description': 'str',
> + '*default': 'any' } }
ObjectPropertyInfo has three users: qom-list, device-list-properties,
qom-list-properties.
>
> ##
> # @qom-list:
> diff --git a/qmp.c b/qmp.c
> index b92d62c..8415541 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -593,6 +593,11 @@ ObjectPropertyInfoList *qmp_qom_list_properties(const char *typename,
> info->type = g_strdup(prop->type);
> info->has_description = !!prop->description;
> info->description = g_strdup(prop->description);
> + if (obj) {
> + info->q_default =
> + object_property_get_qobject(obj, info->name, NULL);
> + info->has_q_default = !!info->q_default;
> + }
>
> entry = g_malloc0(sizeof(*entry));
> entry->value = info;
You update only qom-list-properties.
The other two therefore never return objects with a @default member.
But query-qmp-schema can't tell. Awkward. The doc comments don't tell.
Doc bug.
You could have qom-list-properties return a new type
{ 'struct': 'ObjectPropertyInfoWithDefault',
'base': 'ObjectPropertyInfo',
'data': { '*default': any } }
The default value shown by qom-list-properties is the value found in a
fresh object created with object_new(). object_new() runs
->instance_init(), which can do anything. When you call object_new()
again, you might find a different value. In other words, the @default
returned by qom-list-properties is unreliable.
Related to this qom-list-properties caveat:
# Note: objects can create properties at runtime, for example to describe
# links between different devices and/or objects. These properties
# are not included in the output of this command.
Please add a similar one for @default.
This command fights QOM's basic design premises, and it shows.
More information about the libvir-list
mailing list