[libvirt] [PATCH 2/2] qemu: Don't fail stats collection due to IOThread capability

Ján Tomko jtomko at redhat.com
Thu Dec 6 13:59:06 UTC 2018


On Tue, Nov 27, 2018 at 11:23:23AM -0500, John Ferlan wrote:
>Commit 212dc9286 made a generic qemuDomainGetIOThreadsMon which
>would fail if the QEMU_CAPS_OBJECT_IOTHREAD didn't exist. Then
>commit d1eac927 used that helper for the collection of all domain
>stats. However, if the capability doesn't exist, then the entire
>stats collection fails. Since the IOThread stats were meant to be
>if available only, thus rather than failing if the capability
>doesn't exist, let's just not collect the stats. Restore the caps
>failure logic for qemuDomainGetIOThreadsLive.
>
>Signed-off-by: John Ferlan <jferlan at redhat.com>
>---
> src/qemu/qemu_driver.c | 22 ++++++++++++++--------
> 1 file changed, 14 insertions(+), 8 deletions(-)
>
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index 2fb8eef609..60e29577ad 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -5490,16 +5490,9 @@ qemuDomainGetIOThreadsMon(virQEMUDriverPtr driver,
>                           virDomainObjPtr vm,
>                           qemuMonitorIOThreadInfoPtr **iothreads)
> {
>-    qemuDomainObjPrivatePtr priv;
>+    qemuDomainObjPrivatePtr priv = vm->privateData;
>     int niothreads = 0;
>
>-    priv = vm->privateData;
>-    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
>-        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>-                       _("IOThreads not supported with this binary"));
>-        return -1;
>-    }
>-
>     qemuDomainObjEnterMonitor(driver, vm);
>     niothreads = qemuMonitorGetIOThreads(priv->mon, iothreads);
>     if (qemuDomainObjExitMonitor(driver, vm) < 0 || niothreads < 0)
>@@ -5514,6 +5507,7 @@ qemuDomainGetIOThreadsLive(virQEMUDriverPtr driver,
>                            virDomainObjPtr vm,
>                            virDomainIOThreadInfoPtr **info)
> {
>+    qemuDomainObjPrivatePtr priv;
>     qemuMonitorIOThreadInfoPtr *iothreads = NULL;
>     virDomainIOThreadInfoPtr *info_ret = NULL;
>     int niothreads = 0;
>@@ -5529,6 +5523,13 @@ qemuDomainGetIOThreadsLive(virQEMUDriverPtr driver,
>         goto endjob;
>     }
>
>+    priv = vm->privateData;
>+    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD)) {
>+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>+                       _("IOThreads not supported with this binary"));
>+        goto endjob;
>+    }
>+
>     if ((niothreads = qemuDomainGetIOThreadsMon(driver, vm, &iothreads)) < 0)
>         goto endjob;
>
>@@ -20874,6 +20875,7 @@ qemuDomainGetStatsIOThread(virQEMUDriverPtr driver,
>                            int *maxparams,
>                            unsigned int privflags ATTRIBUTE_UNUSED)
> {
>+    qemuDomainObjPrivatePtr priv;

dom is locked when this function is called, you can initialize priv here

>     size_t i;
>     qemuMonitorIOThreadInfoPtr *iothreads = NULL;
>     int niothreads;
>@@ -20882,6 +20884,10 @@ qemuDomainGetStatsIOThread(virQEMUDriverPtr driver,
>     if (!virDomainObjIsActive(dom))
>         return 0;
>
>+    priv = dom->privateData;
>+    if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_OBJECT_IOTHREAD))
>+        return 0;
>+
>     if ((niothreads = qemuDomainGetIOThreadsMon(driver, dom, &iothreads)) < 0)
>         return -1;

Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20181206/fc103801/attachment-0001.sig>


More information about the libvir-list mailing list