[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 2/2] full introspection support for QMP
From: |
Wenchao Xia |
Subject: |
Re: [Qemu-devel] [PATCH v2 2/2] full introspection support for QMP |
Date: |
Mon, 23 Dec 2013 14:32:46 +0800 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 |
Hi, Amos
(resend without big attachment)
Hello Eric, other
We had "command, enumeration, type, unionobj" in Eric suggested DataObject
union, it's helpful for us to provide meaningful metadata in the output.
but there still exists some problem.
We should describe some arbitrary data struct, I would like to call it "undefined
struct"
If user have defined an arbitrary or embbed data struct, I think it
is better leave as it is, instead of generate a new struct for it.
Since qapi-visit.c and qapi-types.c doesn't have a "undefined" struct
for it now, it is a bit risk to do it only in QMP introspection. Maybe
leave it now, and support it when we found it is really useful?(and add
it in qapi-visit.c and qapi-types.c correspondly)
eg 1:
{ 'type': 'VersionInfo',
'data': {'qemu': {'major': 'int', 'minor': 'int', 'micro': 'int'},
'package': 'str'} }
it's same as:
{ 'type': 'newtype',
'data': {'major': 'int', 'minor': 'int', 'micro': 'int'} }
{ 'type': 'VersionInfo',
'data': { 'qemu': 'newtype', 'package': 'str'} }
The difference between original 'DataObjectType' and
'DataObjectUndefinedStruct'
is that we don't have 'name' for the DataObject union for undefined struct.
so I set the 'name' item in DataObjectBase to be optional.
eg 2:
{ 'command': 'human-monitor-command',
'data': {'command-line': 'str', '*cpu-index': 'int'},
'returns': 'str' }
... 'returns': ['RxFilterInfo'] }
... 'returns': 'ChardevReturn' }
We returns str (native type), list or extended dict here. Sometimes we
returns a defined type, but it doesn't need to be extended. And we need
to describe this kind of data (type str, dict or list) by "DataObject"
in schema definition of DataObject** type.
So I added a "'reference-type': 'String'" in DataObject union.
list, dict will still be described by "DataObjectType"
I guess you want to tip what type may be returned? It seems a bit too
agressive, since the qapi-schema.json didn't tip that those types may
be returned.
You can find the draft patches here:
https://github.com/kongove/qemu/commits/qmp-introspection
I will post the V3 when I finish the cleanup.
Thanks, Amos
Command output
==============
https://raw.github.com/kongove/misc/master/txt/qmp-introspection.output.txt
(1.6M)
Latest schema definition
========================
{ 'type': 'DataObjectBase',
'data': { '*name': 'str', 'type': 'str' } }
{ 'union': 'DataObjectMemberType',
'discriminator': {},
'data': { 'reference': 'str',
'undefined': 'DataObject',
'extend': 'DataObject' } }
{ 'type': 'DataObjectMember',
'data': { 'type': 'DataObjectMemberType', '*name': 'str',
'*optional': 'bool', '*recursive': 'bool' } }
{ 'type': 'DataObjectCommand',
'data': { '*data': [ 'DataObjectMember' ],
'*returns': 'DataObject',
'*gen': 'bool' } }
{ 'type': 'DataObjectEnumeration',
'data': { 'data': [ 'str' ] } }
{ 'type': 'DataObjectType',
'data': { 'data': [ 'DataObjectMember' ] } }
{ 'type': 'DataObjectUndefinedStruct',
'data': { 'data': [ 'DataObjectMember' ] } }
{ 'type': 'DataObjectUnion',
'data': { 'data': [ 'DataObjectMember' ], '*base': 'str',
'*discriminator': 'str' } }
{ 'union': 'DataObject',
'base': 'DataObjectBase',
'discriminator': 'type',
'data': {
'command': 'DataObjectCommand',
'enumeration': 'DataObjectEnumeration',
'type': 'DataObjectType',
'undefined-struct': 'DataObjectUndefinedStruct',
'reference-type': 'String',
'unionobj': 'DataObjectUnion' } }
{ 'command': 'query-qmp-schema', 'returns': ['DataObject'] }