From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35406) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uz33m-0005sc-Qq for qemu-devel@nongnu.org; Tue, 16 Jul 2013 07:04:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uz33l-00005v-Fp for qemu-devel@nongnu.org; Tue, 16 Jul 2013 07:04:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:30240) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uz33l-00005j-77 for qemu-devel@nongnu.org; Tue, 16 Jul 2013 07:04:45 -0400 Date: Tue, 16 Jul 2013 19:04:40 +0800 From: Amos Kong Message-ID: <20130716110440.GC743@amosk.info> References: <1373971062-28909-1-git-send-email-akong@redhat.com> <1373971062-28909-3-git-send-email-akong@redhat.com> <51E52504.5060306@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <51E52504.5060306@redhat.com> Subject: Re: [Qemu-devel] [PATCH v2 2/2] full introspection support for QMP List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: armbru@redhat.com, aliguori@us.ibm.com, qemu-devel@nongnu.org, lcapitulino@redhat.com On Tue, Jul 16, 2013 at 12:48:36PM +0200, Paolo Bonzini wrote: > Il 16/07/2013 12:37, Amos Kong ha scritto: > > So here I defined a 'DataObject' type in qapi-schema.json, > > it's used to describe the dynamical dictionary/list/string. > > > > { 'type': 'DataObject', > > 'data': { '*key': 'str', '*type': 'str', '*data': ['DataObject'] } } Hi Paolo, > This is missing '*optional': 'bool'. Also, how do you distinguish these: > > { 'command': 'query-tpm-types', 'returns': 'TpmType] } do you mean 'TpmType' ? not 'TpmType] { "name": "query-tpm-types", "type": "Command", "returns": [ > { > "type": "passthrough" > } ] }, > { 'command': 'query-tpm-types', 'returns': ['TpmType'] } { "name": "query-tpm-types", "type": "Command", "returns": [ > { > "type": "TpmType", > "data": [ > { > "type": "passthrough" > } > ] > } ] }, > > Could it have to be like this? > > 'data': { '*key': 'str', '*type': 'str', '*list': 'bool', > '*optional': 'bool', > '*data': ['DataObject'] } } there are three conditions: 1) list 2) dict 3) string > Can you document, in the commit message or the code, I added a document for QMP introspection support. (docs/qmp-full-introspection.txt) The DataObject is described in docs/qmp-full-introspection.txt in detail. > how you avoid infinite loops (possible with optional or list fields)? +We have four types (ImageInfo, BlockStats, PciDeviceInfo, SchemaData) +that uses themself in their own define data directly or indirectly, +we will not repeatedly extend them to avoid dead loop. +/* + * Use a string to record the visit path, type index of each node + * will be saved to the string, indexes are split by ':'. + */ related functions: pop_id() push_id() The detail needs to be added to qmp-full-introspection.txt > Paolo > > > Not all the keys in data will be used. > > # List: type > > # Dict: key, type > > # nested List: type, data > > # nested Dict: key, type, data > > > > The DataObject is described in docs/qmp-full-introspection.txt in > > detail. > > > > The following content gives an example of query-tpm-types: > > > > ## Define example in qapi-schema.json: > > > > { 'enum': 'TpmType', 'data': [ 'passthrough' ] } > > { 'command': 'query-tpm-types', 'returns': ['TpmType'] } > > > > ## Returned description: > > > > { > > "name": "query-tpm-types", > > "type": "Command", > > "returns": [ > > { > > "type": "TpmType", > > "data": [ > > { > > "type": "passthrough" > > } > > ] > > } > > ] > > }, -- Amos.