[libvirt] [PATCH] qemu_agent: Report error class at least
Daniel P. Berrange
berrange at redhat.com
Thu Apr 12 12:14:52 UTC 2012
On Thu, Apr 12, 2012 at 02:06:21PM +0200, Michal Privoznik wrote:
> Currently, qemu GA is not providing 'desc' field for errors like
> we are used to from qemu monitor. Therefore, we fall back to this
> general 'unknown error' string. However, GA is reporting 'class' which
> is not perfect, but much more helpful than generic error string.
> Thus we should fall back to class firstly and if even no class
> is presented, then we can fall back to that generic string.
>
> Before this patch:
> virsh # dompmsuspend --target mem f16
> error: Domain f16 could not be suspended
> error: internal error unable to execute QEMU command
> 'guest-suspend-ram': unknown QEMU command error
>
> After this patch:
> virsh # dompmsuspend --target mem f16
> error: Domain f16 could not be suspended
> error: internal error unable to execute QEMU command
> 'guest-suspend-ram': CommandNotFound
> ---
> src/qemu/qemu_agent.c | 14 ++++++--------
> 1 files changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
> index b759b7f..decfd0e 100644
> --- a/src/qemu/qemu_agent.c
> +++ b/src/qemu/qemu_agent.c
> @@ -1035,19 +1035,17 @@ static const char *
> qemuAgentStringifyError(virJSONValuePtr error)
> {
> const char *klass = virJSONValueObjectGetString(error, "class");
> - const char *detail = NULL;
> + const char *detail = virJSONValueObjectGetString(error, "desc");
>
> /* The QMP 'desc' field is usually sufficient for our generic
> - * error reporting needs.
> + * error reporting needs. However, older agents did not provide
> + * any 'desc'. Reporting 'class' is not perfect but better
> + * than bare 'unknown error'.
> */
> - if (klass)
> - detail = virJSONValueObjectGetString(error, "desc");
> -
> -
> - if (!detail)
> + if (!detail && !klass)
> detail = "unknown QEMU command error";
>
> - return detail;
> + return detail ? detail : klass;
> }
You can get a list of all 'class' names that QEMU currently supports
from qerror.h. As we do for VIR_ERR_XXXXX constants, you should create
a mapping from QEMU class names, to error message strings.
Even better, share this mapping between the agent & json monitor code
so we can improve error messages in both cases.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list