qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Laurent Vivier <lvivier@redhat.com>,
	Thomas Huth <thuth@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	David Hildenbrand <david@redhat.com>,
	Michael Roth <michael.roth@amd.com>,
	Cornelia Huck <cohuck@redhat.com>,
	Yuval Shaia <yuval.shaia.ml@gmail.com>,
	qemu-devel@nongnu.org, Peter Xu <peterx@redhat.com>,
	"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
	Halil Pasic <pasic@linux.ibm.com>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	qemu-s390x@nongnu.org, Gerd Hoffmann <kraxel@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	Eric Blake <eblake@redhat.com>
Subject: Re: [PATCH v3 04/19] docs/devel: add example of command returning unstructured text
Date: Thu, 28 Oct 2021 16:31:56 +0100	[thread overview]
Message-ID: <YXrCbIP2d19ofgL0@redhat.com> (raw)
In-Reply-To: <87r1c5nr4d.fsf@dusky.pond.sub.org>

On Thu, Oct 28, 2021 at 04:47:14PM +0200, Markus Armbruster wrote:
> Daniel P. Berrangé <berrange@redhat.com> writes:
> 
> > This illustrates how to add a QMP command returning unstructured text,
> > following the guidelines added in the previous patch. The example uses
> > a simplified version of 'info roms'.
> >
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> >  docs/devel/writing-monitor-commands.rst | 87 ++++++++++++++++++++++++-
> >  1 file changed, 86 insertions(+), 1 deletion(-)

> > +Implementing the HMP command
> > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > +
> > +Now that the QMP command is in place, we can also make it available in
> > +the human monitor (HMP) as shown in previous examples. The HMP
> > +implementations will all look fairly similar, as all they need do is
> > +invoke the QMP command and then print the resulting text or error
> > +message. Here's the implementation of the "info roms" HMP command::
> > +
> > + void hmp_info_roms(Monitor *mon, const QDict *qdict)
> > + {
> > +     Error err = NULL;
> > +     g_autoptr(HumanReadableText) info = qmp_x_query_roms(&err);
> > +
> > +     if (err) {
> > +         error_report_err(err);
> > +         return;
> > +     }
> 
> There's hmp_handle_error().
> 
> If it returned whether there's an error, we could write
> 
>         if (hmp_handle_error(err)) {
>             return;
>         }

I'll add a return value to hmp_handle_error and update existing
callers where appropriate

> 
> Of course, qmp_x_query_roms() can't fail, so we could just as well do
> 
>         g_autoptr(HumanReadableText) info = qmp_x_query_roms(&error_abort);
> 
> Okay as long as we show how to report errors in HMP commands
> *somewhere*, but the use of &error_abort needs explaining.  Not sure
> that's an improvement here.

For the sake of illustration I think I'll stick with hmp_handle_error
and not &error_abort.  In fact following Dave's feedback, I've added
a helper to provide the HMP implementation with no code required in
the no-arg case.

> Aside: the existing examples show questionable error handling.  The
> first one uses error_get_pretty() instead of hmp_handle_error().  The
> other two throw away the error they get from the QMP command, and report
> "Could not query ..." instead, which is a bit of an anti-pattern.

I'll fix those examples

> 
> > +     monitor_printf(mon, "%s\n", info->human_readable_text);
> 
> Sure you want to print an extra newline?

Opps, mistake.

> If not, then consider
> 
>         monitor_puts(mon, info->human_readable_text);

I'd prefer "%s", since it avoids danger of the human readable
text possibly containing a '%' sign that trips up printf.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|



  reply	other threads:[~2021-10-28 15:33 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-30 13:23 [PATCH v3 00/19] monitor: explicitly permit QMP commands to be added for all use cases Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 01/19] docs/devel: rename file for writing monitor commands Daniel P. Berrangé
2021-10-04 15:50   ` Eric Blake
2021-09-30 13:23 ` [PATCH v3 02/19] docs/devel: tweak headings in monitor command docs Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 03/19] docs/devel: document expectations for QAPI data modelling for QMP Daniel P. Berrangé
2021-10-04 12:13   ` Dr. David Alan Gilbert
2021-10-04 12:23     ` Daniel P. Berrangé
2021-10-28 14:31   ` Markus Armbruster
2021-10-28 15:24     ` Daniel P. Berrangé
2021-11-03 13:52       ` Daniel P. Berrangé
2021-11-04  5:43         ` Markus Armbruster
2021-11-04  8:54           ` Daniel P. Berrangé
2021-11-09  6:39             ` Markus Armbruster
2021-11-09  9:47               ` Daniel P. Berrangé
2021-11-09 14:58                 ` Markus Armbruster
2021-09-30 13:23 ` [PATCH v3 04/19] docs/devel: add example of command returning unstructured text Daniel P. Berrangé
2021-10-04 18:25   ` Eric Blake
2021-10-28 14:47   ` Markus Armbruster
2021-10-28 15:31     ` Daniel P. Berrangé [this message]
2021-10-28 17:13       ` Markus Armbruster
2021-09-30 13:23 ` [PATCH v3 05/19] docs/devel: document expectations for HMP commands in the future Daniel P. Berrangé
2021-10-04 18:33   ` Eric Blake
2021-10-28 14:47   ` Markus Armbruster
2021-09-30 13:23 ` [PATCH v3 06/19] monitor: remove 'info ioapic' HMP command Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 07/19] qapi: introduce x-query-roms QMP command Daniel P. Berrangé
2021-10-04 12:32   ` Dr. David Alan Gilbert
2021-10-04 15:57     ` Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 08/19] qapi: introduce x-query-profile " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 09/19] qapi: introduce x-query-numa " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 10/19] qapi: introduce x-query-usb " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 11/19] qapi: introduce x-query-rdma " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 12/19] qapi: introduce x-query-ramblock " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 13/19] qapi: introduce x-query-skeys " Daniel P. Berrangé
2021-10-12  7:12   ` Thomas Huth
2021-10-18  9:50     ` Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 14/19] qapi: introduce x-query-cmma " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 15/19] hmp: synchronize cpu state for lapic info Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 16/19] qapi: introduce x-query-lapic QMP command Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 17/19] qapi: introduce x-query-irq " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 18/19] qapi: introduce x-query-jit " Daniel P. Berrangé
2021-09-30 13:23 ` [PATCH v3 19/19] qapi: introduce x-query-opcount " Daniel P. Berrangé

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=YXrCbIP2d19ofgL0@redhat.com \
    --to=berrange@redhat.com \
    --cc=armbru@redhat.com \
    --cc=borntraeger@de.ibm.com \
    --cc=cohuck@redhat.com \
    --cc=david@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=pasic@linux.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-s390x@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    --cc=yuval.shaia.ml@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).