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 :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list