The bulk domain stats API is meant to collect as much data as possible
without erroring out.
If fetching of the memory bandwidth stats fails just skip outputing them.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_driver.c | 23 +++++++++++------------
1 file changed, 11 insertions(+), 12 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e513223de2..45f286994e 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -16697,28 +16697,30 @@ qemuDomainGetResctrlMonData(virQEMUDriver *driver,
}
-static int
+static void
qemuDomainGetStatsMemoryBandwidth(virQEMUDriver *driver,
virDomainObj *dom,
virTypedParamList *params)
{
- virQEMUResctrlMonData **resdata = NULL;
+ g_autofree virQEMUResctrlMonData **resdata = NULL;
char **features = NULL;
size_t nresdata = 0;
size_t i = 0;
size_t j = 0;
size_t k = 0;
- int ret = -1;
if (!virDomainObjIsActive(dom))
- return 0;
+ return;
if (qemuDomainGetResctrlMonData(driver, dom, &resdata, &nresdata,
- VIR_RESCTRL_MONITOR_TYPE_MEMBW) < 0)
- goto cleanup;
+ VIR_RESCTRL_MONITOR_TYPE_MEMBW) < 0) {
+ /* don't return cache stats if we can't fetch them */
+ virResetLastError();
+ return;
+ }
if (nresdata == 0)
- return 0;
+ return;
virTypedParamListAddUInt(params, nresdata,
"memory.bandwidth.monitor.count");
@@ -16751,12 +16753,8 @@ qemuDomainGetStatsMemoryBandwidth(virQEMUDriver *driver,
}
}
- ret = 0;
- cleanup:
for (i = 0; i < nresdata; i++)
qemuDomainFreeResctrlMonData(resdata[i]);
- VIR_FREE(resdata);
- return ret;
}
@@ -16970,7 +16968,8 @@ qemuDomainGetStatsMemory(virQEMUDriver *driver,
unsigned int privflags G_GNUC_UNUSED)
{
- return qemuDomainGetStatsMemoryBandwidth(driver, dom, params);
+ qemuDomainGetStatsMemoryBandwidth(driver, dom, params);
+ return 0;
}
--
2.48.1