From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=35577 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pxi70-00038k-CF for qemu-devel@nongnu.org; Thu, 10 Mar 2011 10:49:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pxi6z-0006ni-7C for qemu-devel@nongnu.org; Thu, 10 Mar 2011 10:49:14 -0500 Received: from mx1.redhat.com ([209.132.183.28]:14326) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pxi6y-0006nQ-S8 for qemu-devel@nongnu.org; Thu, 10 Mar 2011 10:49:13 -0500 Message-ID: <4D78F2F2.9020007@redhat.com> Date: Thu, 10 Mar 2011 17:49:06 +0200 From: Avi Kivity MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 19/22] qapi: add QMP put-event command References: <1299460984-15849-1-git-send-email-aliguori@us.ibm.com> <1299460984-15849-20-git-send-email-aliguori@us.ibm.com> <4D778117.9060505@redhat.com> <4D778545.7040403@codemonkey.ws> <4D778797.9090602@redhat.com> <4D778E07.5070408@codemonkey.ws> <4D78C69F.6010003@redhat.com> <4D78DC5A.3000601@codemonkey.ws> <4D78DF3A.9000600@redhat.com> <4D78EEA3.9050401@redhat.com> <4D78F11B.4050402@codemonkey.ws> In-Reply-To: <4D78F11B.4050402@codemonkey.ws> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Luiz Capitulino , Markus Armbruster , qemu-devel@nongnu.org On 03/10/2011 05:41 PM, Anthony Liguori wrote: >> I also think it should be at the protocol layer: >> >> > { execute: some-command, id: foo, arguments: { ... } } >> < { result: { ... }, id: foo } >> > { subscribe: block-io-error, id: bar, arguments: { ... } } >> < { result: { ... } id: bar } >> < { event: block-io-error, id: bar, data : { ... } } >> > { unsubscribe: block-io-error, id: bar } >> < { result: { ... } id: bar } >> >> So events are now protocol-level pieces like commands, and the use of >> tags is uniform. > > > Maybe for QMPv2, but for QMPv1, this is going to introduce an > extremely incompatible change. Why? It's 100% backwards compatible. > > Actually, we missed the json-rpc boat in designing QMP. It should > look like: > IIRC I looked at it and it didn't impress me. > > { method: some-command, id: foo, params: { ... } } > < { result: { ... }, id: foo, params: { ... }, error: null } > > { method: connect-block-io-error, id: bar, params: { ... } } > < { result: { ... }, id: bar, error: null } > < { method: block-io-error, id: null, params: { ... } } > > Keys are different and null is passed instead of not including a tag. > Events are sent exactly like methods but id is null. A result is > never sent to the server for an event. That means that we need a per-event command, instead of making it protocol-level. > > One of the good things about using a code generator and IDL though is > that we can add a -qmp dev,protocol=json-rpc that encodes > appropriately. We can probably do this translation at the QObject > level really. But in the future, we can also add -qmp > dev,protocol=xml-rpc, -qmp dev,protocol=rest, or -qmp > dev,protocol=asn1-rpc > Let's get one protocol that works first. -- error compiling committee.c: too many arguments to function