[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] hmp: delvm: use hmp_handle_error
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH] hmp: delvm: use hmp_handle_error |
Date: |
Fri, 12 Apr 2019 20:15:32 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Cole Robinson <address@hidden> writes:
> This gives us the consistent 'Error:' prefix added in 66363e9a43f,
> which helps users like libvirt who still need to scrape hmp error
> messages to detect failure.
>
> Signed-off-by: Cole Robinson <address@hidden>
> ---
> hmp.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/hmp.c b/hmp.c
> index 8eec768088..74a4bfc1f9 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -1481,10 +1481,11 @@ void hmp_delvm(Monitor *mon, const QDict *qdict)
> const char *name = qdict_get_str(qdict, "name");
>
> if (bdrv_all_delete_snapshot(name, &bs, &err) < 0) {
> - error_reportf_err(err,
> - "Error while deleting snapshot on device '%s': ",
> - bdrv_get_device_name(bs));
> + error_prepend(&err,
> + "Error while deleting snapshot on device '%s': ",
> + bdrv_get_device_name(bs));
> }
> + hmp_handle_error(mon, &err);
> }
>
> void hmp_info_snapshots(Monitor *mon, const QDict *qdict)
No objection to this patch, just apropos hmp_handle_error().
HMP command handlers look like this:
void hmp_FOO(Monitor *mon, const QDict *qdict)
They can report errors however they like. The monitor core has no
notion of HMP command failure.
Commonly, hmp_FOO() wraps around some qmp_FOO(), or some helper(s) it
shares with qmp_FOO(). These will return errors through an Error **
argument. The sane way for hmp_FOO() to report them is with
hmp_handle_error().
In other words, we get an hmp_handle_error() on most[*] failure paths.
Why not move it into the monitor core?
bool hmp_FOO(Monitor *mon, const QDict *qdict, Error **errp)
While at it, ditch the @mon parameter, because it's always cur_mon
anyway:
bool hmp_FOO(const QDict *qdict, Error **errp)
[*] Common exceptions are failures in code that add convenience over
QMP. These need not produce an Error object. Instead, they may report
with error_report(), or even monitor_printf(). The latter would be in
bad taste.