[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: |
Amos Kong |
Subject: |
Re: [Qemu-devel] [PATCH v2 2/2] full introspection support for QMP |
Date: |
Mon, 23 Dec 2013 15:15:03 +0800 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Mon, Dec 23, 2013 at 02:32:46PM +0800, Wenchao Xia wrote:
> 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.
I don't really generate a new struct for it, just try the arbitrary
data as an abstract 'undefined' struct.
In the output, it's "leave as it is".
> 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.
In command schema, the value of 'returns' tips the model of return data.
It can be string(defined type/union/enum/etc) or undefined list/dict.
> >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.
--
Amos.