]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: caps: Probe events from 'query-qmp-schema' rather than 'query-events'
authorPeter Krempa <pkrempa@redhat.com>
Thu, 7 Feb 2019 11:50:27 +0000 (12:50 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 8 Feb 2019 09:11:20 +0000 (10:11 +0100)
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.

https://bugzilla.redhat.com/show_bug.cgi?id=1673320

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
src/qemu/qemu_capabilities.c

index cc5090130574630a60f36df52be4aba0b459627c..31191dd8b83940085dbb3205be8c684ddea68eeb 100644 (file)
@@ -986,6 +986,7 @@ struct virQEMUCapsStringFlags virQEMUCapsMigration[] = {
     { "rdma-pin-all", QEMU_CAPS_MIGRATE_RDMA },
 };
 
+/* Use virQEMUCapsQMPSchemaQueries for querying parameters of events */
 struct virQEMUCapsStringFlags virQEMUCapsEvents[] = {
     { "MIGRATION", QEMU_CAPS_MIGRATION_EVENT },
     { "VSERPORT_CHANGE", QEMU_CAPS_VSERPORT_CHANGE },
@@ -2125,6 +2126,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,
@@ -4140,6 +4147,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;
 }