All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: David Hildenbrand <david@redhat.com>
Cc: "Daniel P. Berrangé" <berrange@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>
Subject: Re: [PATCH v2] hmp: Make json format optional for qom-set
Date: Mon, 22 Jun 2020 10:05:11 +0200	[thread overview]
Message-ID: <87d05rr0eg.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <70d42699-f17b-320e-3a21-4454978ca8d6@redhat.com> (David Hildenbrand's message of "Mon, 15 Jun 2020 09:45:52 +0200")

David Hildenbrand <david@redhat.com> writes:

> On 15.06.20 08:17, Markus Armbruster wrote:
>> David Hildenbrand <david@redhat.com> writes:
>> 
>>> Commit 7d2ef6dcc1cf ("hmp: Simplify qom-set") switched to the json
>>> parser, making it possible to specify complex types. However, with this
>>> change it is no longer possible to specify proper sizes (e.g., 2G, 128M),
>>> turning the interface harder to use for properties that consume sizes.
>>>
>>> Let's switch back to the previous handling and allow to specify passing
>>> json via the "-j" parameter.
>> 
>> Two issues:
>> 
>> 1. Makes qom-get and qom-set inconsistent
>> 
>>    qom-get formats as JSON, always.
>> 
>>    qom-set parses the string visitor's undocumented ad hoc language by
>>    default.  You can make it parse JSON by passing -j.
>
> This is the same language the QEMU cmdline uses, no?

The CLI uses many, many languages.  The string visitor's language may
well be among them; can't tell offhand.

>
>> 
>>    Not a show stopper, but sure ugly.  I feel documentation should point
>>    it out.
>
> Sure, we can fine-tune the documentation. For now we didn't have any
> qom-get users, in contrast to qom-set. Not sure if it makes sense to
> implement the same functionality for qom-get.
>
> For now I can e.g.,
>
> "echo "qom-set vm1 requested-size 256M" | sudo nc -U /var/tmp/mon_src"
>
> then I can
>
> echo "qom-get vm1 requested-size " | sudo nc -U /var/tmp/mon_src
> -> 268435456
>
> which is a value I can punch back into qom-set. At least for sizes this
> works. Not perfect, not bad. Opinions?

It happens to work in this case, because the JSON number returned by
qom-get happens to get parsed the right way by qom-set.

Is this the case for all properties where qom-set isn't deadly due to
issue 2.?  Nobody knows.

>> 2. Rearms the string visitor death trap
>> 
>>    If you try to qom-set a property whose ->set() uses something the
>>    string input visitor doesn't support, QEMU crashes.  I'm not aware of
>>    such a ->set(), but this is a death trap all the same.  Mind, I
>>    didn't actually *look* for such a ->set().  Details:
>
> Thanks. Maybe I am missing something important, but this sounds like we
> are missing a bunch of checks+errors.

The string visitor feels like a quick hack to get something that is
human-friendly.  It provides just enough functionality for its initial
uses.  The trouble is new uses that violate its restrictions are hard to
spot.

In my opinion, what we're really missing a replacement of the
ill-conceived string visitor.  The less it's used, the better.

Since a replacement isn't being worked on, we may have to make it less
dangerous to use.  Patches welcome.

>                                       (wouldn't we be able to crash
> using the QEMU cmdline as well when setting such properties?).

If the string visitor is used there.  Nobody knows.

>>     Subject: Re: [RFC PATCH] qom: Implement qom-get HMP command
>>     Date: Sat, 02 May 2020 08:02:43 +0200 (6 weeks, 2 days, 4 minutes ago)
>>     Message-ID: <87a72q6fi4.fsf@dusky.pond.sub.org>
>>     https://lists.nongnu.org/archive/html/qemu-devel/2020-05/msg00178.html
>> 
>>    Since we've had this death trap in the code for a number of years, I
>>    can't call its restoration a show stopper.  It does feel like an
>>    unadvisable risk, though.
>> 
>
> As long as there are no better alternatives to punch in data in the same
> format the QEMU cmdline consumes, I think this is perfectly reasonable.
> No good reason to make a HMP interface harder to use by humans IMHO.

Yes, HMP should be human-friendly.  Not at any cost, though; I reiterate
my conviction that this is an unadvisable risk.

A crash is the most unfriendly response of all.



  reply	other threads:[~2020-06-22  8:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-10  7:51 [PATCH v2] hmp: Make json format optional for qom-set David Hildenbrand
2020-06-10 10:37 ` David Hildenbrand
2020-06-10 10:39   ` Dr. David Alan Gilbert
2020-06-10 10:40     ` David Hildenbrand
2020-06-17  9:53       ` Dr. David Alan Gilbert
2020-06-10 10:38 ` Dr. David Alan Gilbert
2020-06-15  6:17 ` Markus Armbruster
2020-06-15  7:45   ` David Hildenbrand
2020-06-22  8:05     ` Markus Armbruster [this message]
2020-06-15  9:40   ` Dr. David Alan Gilbert

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87d05rr0eg.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=david@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.