From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58749) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uu41z-0002LQ-4x for qemu-devel@nongnu.org; Tue, 02 Jul 2013 13:06:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Uu41x-00036m-3j for qemu-devel@nongnu.org; Tue, 02 Jul 2013 13:06:19 -0400 Received: from e39.co.us.ibm.com ([32.97.110.160]:55150) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Uu41w-00036V-SV for qemu-devel@nongnu.org; Tue, 02 Jul 2013 13:06:16 -0400 Received: from /spool/local by e39.co.us.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Tue, 2 Jul 2013 11:06:15 -0600 Received: from d01relay03.pok.ibm.com (d01relay03.pok.ibm.com [9.56.227.235]) by d01dlp01.pok.ibm.com (Postfix) with ESMTP id 1A47A38C805C for ; Tue, 2 Jul 2013 13:06:11 -0400 (EDT) Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay03.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r62H6BOQ287800 for ; Tue, 2 Jul 2013 13:06:11 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r62H6BUm009150 for ; Tue, 2 Jul 2013 14:06:11 -0300 From: Anthony Liguori In-Reply-To: <51D2F1B3.1080903@redhat.com> References: <1371644677-11041-1-git-send-email-akong@redhat.com> <878v1pqak4.fsf@codemonkey.ws> <51D2F1B3.1080903@redhat.com> Date: Tue, 02 Jul 2013 12:06:08 -0500 Message-ID: <87a9m4j3i7.fsf@codemonkey.ws> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: Re: [Qemu-devel] [PATCH] full introspection support for QMP List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Blake Cc: qemu-devel@nongnu.org, armbru@redhat.com, lcapitulino@redhat.com, qiaonuohan@cn.fujitsu.com, pbonzini@redhat.com, Amos Kong Eric Blake writes: > On 07/02/2013 08:51 AM, Anthony Liguori wrote: >> Amos Kong writes: >> >>> Introduces new monitor command to query QMP schema information, >>> the return data is a nested dict/list, it contains the useful >>> metadata. >>> >>> we can add events definations to qapi-schema.json, then it can >>> also be queried. >>> >>> Signed-off-by: Amos Kong >> >> Maybe I'm being too meta here, but why not just return qapi-schema.json >> as a string and call it as day? > > Because qapi-schema.json requires further parsing. For example, how is > a client supposed to know that '*foo':'int' means that there is an > argument named 'foo' but it is optional? The rule of thumb with QMP is > that if you have to post-process JSON output, then the JSON was not > designed correctly. Then we should fix qapi-schema.json. >> It's JSON already and since QMP is JSON, the client already has a JSON >> parser. Adding another level of complexity doesn't add much value IMHO. > > qapi-schema.json is not quite JSON, in that it has #comments that we'd > have to strip before we attempted a trick like this. Pretty easy to filter that out... > I've also been the one arguing that the additional complexity (an array of > {"name":"str","type":"str","optional":bool"}) is better for libvirt in > that the JSON is then well-suited for scanning (it is easier to scan > through an array where the key is a constant "name", and looking for the > value that we are interested in, than it is to scan through a dictionary > where the keys of the dictionary are the names we are interested in). > That is, the JSON in qapi-schema.json is a nice compact representation > that works for humans, but may be a bit TOO compact for handling via > machines. But adding a bunch of code to do JSON translation just adds a bunch of additional complexity. One reasonable compromise would be: { "command": "foo", "arguments": { "name": "str", "id": "int" }, "optional": { "bar": "bool" } } Then libvirt only has to test 'does command["optional"] contain key "bar"' to test for an optional parameter. Although to be honest, '*bar' in command['arguments'] is reasonable too IMHO. Regards, Anthony Liguori > > -- > Eric Blake eblake redhat com +1-919-301-3266 > Libvirt virtualization library http://libvirt.org