[libvirt] [PATCH 09/10] qemu: caps: Probe events from 'query-qmp-schema' rather than 'query-events'

Peter Krempa posted 10 patches 7 years ago
[libvirt] [PATCH 09/10] qemu: caps: Probe events from 'query-qmp-schema' rather than 'query-events'
Posted by Peter Krempa 7 years ago
QEMU plans to deprecate 'query-events' as it's non-extensible. Events
are also described by 'query-qmp-schema' so we can use that one instead.

This patch adds detection of events to
virQEMUCapsProbeQMPSchemaCapabilities using the same structure declaring
them for the old approach (virQEMUCapsEvents). This is possible as the
name is the same in the QMP schema and our detector supports that
trivially.

For any complex queries virQEMUCapsQMPSchemaQueries can be used in the
future.

For now we still call 'query-events' and discard the result so that it's
obvious that the tests pass. This will be cleaned up later.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
---
 src/qemu/qemu_capabilities.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 7f3f87c48d..9c79511b1d 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2123,6 +2123,12 @@ virQEMUCapsProbeQMPEvents(virQEMUCapsPtr qemuCaps,
     if ((nevents = qemuMonitorGetEvents(mon, &events)) < 0)
         return -1;

+    /* we can probe events also from the QMP schema so we can skip this here */
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_QMP_SCHEMA)) {
+        virStringListFreeCount(events, nevents);
+        return 0;
+    }
+
     virQEMUCapsProcessStringFlags(qemuCaps,
                                   ARRAY_CARDINALITY(virQEMUCapsEvents),
                                   virQEMUCapsEvents,
@@ -4138,6 +4144,14 @@ virQEMUCapsProbeQMPSchemaCapabilities(virQEMUCapsPtr qemuCaps,
             virQEMUCapsSet(qemuCaps, entry->flag);
     }

+    /* probe also for basic event support */
+    for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsEvents); i++) {
+        entry = virQEMUCapsEvents + i;
+
+        if (virQEMUQAPISchemaPathExists(entry->value, schema))
+            virQEMUCapsSet(qemuCaps, entry->flag);
+    }
+
     virHashFree(schema);
     return 0;
 }
-- 
2.20.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 09/10] qemu: caps: Probe events from 'query-qmp-schema' rather than 'query-events'
Posted by Eric Blake 7 years ago
On 2/7/19 6:28 AM, Peter Krempa wrote:
> QEMU plans to deprecate 'query-events' as it's non-extensible. Events
> are also described by 'query-qmp-schema' so we can use that one instead.
> 
> This patch adds detection of events to
> virQEMUCapsProbeQMPSchemaCapabilities using the same structure declaring
> them for the old approach (virQEMUCapsEvents). This is possible as the
> name is the same in the QMP schema and our detector supports that
> trivially.
> 
> For any complex queries virQEMUCapsQMPSchemaQueries can be used in the
> future.
> 
> For now we still call 'query-events' and discard the result so that it's
> obvious that the tests pass. This will be cleaned up later.
> 
> Signed-off-by: Peter Krempa <pkrempa@redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 7f3f87c48d..9c79511b1d 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -2123,6 +2123,12 @@ virQEMUCapsProbeQMPEvents(virQEMUCapsPtr qemuCaps,
>      if ((nevents = qemuMonitorGetEvents(mon, &events)) < 0)
>          return -1;
> 
> +    /* we can probe events also from the QMP schema so we can skip this here */
> +    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_QMP_SCHEMA)) {
> +        virStringListFreeCount(events, nevents);
> +        return 0;
> +    }

Slick. For this patch, we call query-events unconditionally (as before),
but when qemu is new enough to also have introspection, we throw away
the results without using them...

> +
>      virQEMUCapsProcessStringFlags(qemuCaps,
>                                    ARRAY_CARDINALITY(virQEMUCapsEvents),
>                                    virQEMUCapsEvents,
> @@ -4138,6 +4144,14 @@ virQEMUCapsProbeQMPSchemaCapabilities(virQEMUCapsPtr qemuCaps,
>              virQEMUCapsSet(qemuCaps, entry->flag);
>      }
> 
> +    /* probe also for basic event support */
> +    for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsEvents); i++) {
> +        entry = virQEMUCapsEvents + i;
> +
> +        if (virQEMUQAPISchemaPathExists(entry->value, schema))
> +            virQEMUCapsSet(qemuCaps, entry->flag);
> +    }
> +

...and rebuild the same results from the introspection. I like the
split, and am glad that it was fairly trivial to update to introspection
while still keeping the fallback to query-events on older qemu.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 09/10] qemu: caps: Probe events from 'query-qmp-schema' rather than 'query-events'
Posted by Ján Tomko 7 years ago
On Thu, Feb 07, 2019 at 01:28:13PM +0100, Peter Krempa wrote:
>QEMU plans to deprecate 'query-events' as it's non-extensible. Events
>are also described by 'query-qmp-schema' so we can use that one instead.
>
>This patch adds detection of events to
>virQEMUCapsProbeQMPSchemaCapabilities using the same structure declaring
>them for the old approach (virQEMUCapsEvents). This is possible as the
>name is the same in the QMP schema and our detector supports that
>trivially.
>
>For any complex queries virQEMUCapsQMPSchemaQueries can be used in the
>future.
>
>For now we still call 'query-events' and discard the result so that it's
>obvious that the tests pass. This will be cleaned up later.
>
>Signed-off-by: Peter Krempa <pkrempa@redhat.com>
>---
> src/qemu/qemu_capabilities.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>

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

Jano
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list