From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55157) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtfoT-000878-N3 for qemu-devel@nongnu.org; Thu, 19 Dec 2013 10:47:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VtfoN-0002xb-NB for qemu-devel@nongnu.org; Thu, 19 Dec 2013 10:47:01 -0500 Received: from mx1.redhat.com ([209.132.183.28]:10543) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtfoN-0002xT-F0 for qemu-devel@nongnu.org; Thu, 19 Dec 2013 10:46:55 -0500 Message-ID: <52B314DD.2010107@redhat.com> Date: Thu, 19 Dec 2013 16:46:37 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1385001528-12003-1-git-send-email-imammedo@redhat.com> <1385001528-12003-6-git-send-email-imammedo@redhat.com> <87r4aaxdqt.fsf@blackfin.pond.sub.org> <20131125163642.4d832fd5@nial.usersys.redhat.com> <20131125160337.GB10326@redhat.com> <52937BA2.6020605@redhat.com> <52937E44.10503@redhat.com> <20131219144037.GB17508@redhat.com> <52B3115D.50907@redhat.com> <20131219154036.GA2717@redhat.com> In-Reply-To: <20131219154036.GA2717@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 05/27] qapi: add SIZE type parser to string_input_visitor List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: peter.maydell@linaro.org, aliguori@amazon.com, stefanb@linux.vnet.ibm.com, hutao@cn.fujitsu.com, quintela@redhat.com, mjt@tls.msk.ru, qemu-devel@nongnu.org, mdroth@linux.vnet.ibm.com, vasilis.liaskovitis@profitbricks.com, kraxel@redhat.com, stefanha@redhat.com, Igor Mammedov , marcel.a@redhat.com, lcapitulino@redhat.com, chegu_vinod@hp.com, afaerber@suse.de, Markus Armbruster Il 19/12/2013 16:40, Michael S. Tsirkin ha scritto: > On Thu, Dec 19, 2013 at 04:31:41PM +0100, Paolo Bonzini wrote: >> Il 19/12/2013 15:40, Michael S. Tsirkin ha scritto: >>> On Mon, Nov 25, 2013 at 09:43:48AM -0700, Eric Blake wrote: >>>> On 11/25/2013 09:32 AM, Paolo Bonzini wrote: >>>> >>>>>> Yes please. Firing up a calculator to figure out how much is 1G is not >>>>>> friendly, neither is firing it up to figure out what did management do >>>>>> with QMP. It should be a text based interface not a binary one. >>>> >>>> Right now, QMP takes an 'int', which does not allow a suffix. Libvirt >>>> prefers passing a value in 'bytes', rather than risking confusion on >>>> whether a value in G was rounded (up, down? to nearest power of 10 or >>>> power of 2?). Unfortunately, yes, that means you need a calculator when >>>> parsing QMP logs to see whether the 1073741824 passed by libvirt is the >>>> 1G you had in mind. >>>> >>>> HMP, qtest, and any other decent shell around raw QMP is more than >>>> welcome to provide human-usable wrappers that takes "1G" as a string and >>>> turns it into the raw int used by the underlying QMP. In fact, I >>>> encourage it. >>> >>> How will it know 1G is not e.g. an ID? >> >> Because all properties are associated to a name. In the case of a >> memory device, the name could be "size" or "id". When requesting the >> id, QEMU will use visit_type_str. When requesting the size, QEMU will >> use visit_type_size. Different functions are called, and the different >> functions accept different input. > > QEMU can do this, but if you want a frontend with QMP as backend, > it won't. > So you end up re-implementing this logic in all frontends: > instead of just passing on properties they need to know > where 1G is a number and where it's a name. You have schema introspection that lets you know if a property is an int or a size. OptsVisitor chose to accept 1G, but this absolutely need not be universal. Human interfaces must not be designed according to QEMU's own whims. Another front-end may want to differentiate 1GB from 1GiB, a graphical front-end may want to present different widgets; they can do it because they see "size" in the schema but in any case the "final" communication to QEMU via QMP will be an int. Paolo