From: Ján Tomko Date: Wed, 14 May 2014 07:35:18 +0000 (+0200) Subject: Don't log an internal error when the guest hasn't updated balloon stats X-Git-Tag: v1.2.5-rc1~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=268101ea90f6d46117c83ef879182b74ff881e59;p=thirdparty%2Flibvirt.git Don't log an internal error when the guest hasn't updated balloon stats If virDomainMemoryStats is called too soon after domain startup, QEMU returns: "error":{"class":"GenericError","desc":"guest hasn't updated any stats yet"} when we try to query balloon stats. Check for this reply and log it as OPERATION_INVALID instead of INTERNAL_ERROR. This means the daemon only logs it at the debug level, without polluting system logs. Reported by Laszlo Pal: https://www.redhat.com/archives/libvirt-users/2014-May/msg00023.html --- diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index f8ab975695..914f3ef1e7 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -1465,12 +1465,22 @@ int qemuMonitorJSONGetMemoryStats(qemuMonitorPtr mon, NULL))) goto cleanup; - ret = qemuMonitorJSONCommand(mon, cmd, &reply); + if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0) + goto cleanup; - if (ret == 0) - ret = qemuMonitorJSONCheckError(cmd, reply); + if ((data = virJSONValueObjectGet(reply, "error"))) { + const char *klass = virJSONValueObjectGetString(data, "class"); + const char *desc = virJSONValueObjectGetString(data, "desc"); - if (ret < 0) + if (STREQ_NULLABLE(klass, "GenericError") && + STREQ_NULLABLE(desc, "guest hasn't updated any stats yet")) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("the guest hasn't updated any stats yet")); + goto cleanup; + } + } + + if ((ret = qemuMonitorJSONCheckError(cmd, reply)) < 0) goto cleanup; if (!(data = virJSONValueObjectGet(reply, "return"))) {