From: Amneesh Singh Date: Wed, 7 Sep 2022 10:34:20 +0000 (+0530) Subject: qemu_domain: add statsSchema to qemuDomainObjPrivate X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=08af53dcaaa08f7722661a3fe0a6f9e5579f843e;p=libvirt.git qemu_domain: add statsSchema to qemuDomainObjPrivate This patch adds a hashtable for storing the stats schema and a function to refresh it by querying "query-stats-schemas" using qemuMonitorQueryStatsSchema Signed-off-by: Amneesh Singh --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 4c14fc2aef..429a53872f 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1740,6 +1740,8 @@ qemuDomainObjPrivateDataClear(qemuDomainObjPrivate *priv) priv->originalMemlock = 0; priv->preMigrationMemlock = 0; + + virHashRemoveAll(priv->statsSchema); } @@ -1778,6 +1780,9 @@ qemuDomainObjPrivateFree(void *data) g_object_unref(priv->eventThread); } + if (priv->statsSchema) + g_clear_pointer(&priv->statsSchema, g_hash_table_destroy); + g_free(priv); } @@ -1799,6 +1804,8 @@ qemuDomainObjPrivateAlloc(void *opaque) priv->migMaxBandwidth = QEMU_DOMAIN_MIG_BANDWIDTH_MAX; priv->driver = opaque; + priv->statsSchema = NULL; + return g_steal_pointer(&priv); } @@ -11774,3 +11781,38 @@ qemuDomainObjWait(virDomainObj *vm) return 0; } + + +/** + * virDomainRefreshStatsSchema: + * @driver: qemu driver data + * @vm: Pointer to the vm object + * + * Load data into dom->privateData->statsSchema if not stored + * + * Returns -1 on failure, 0 otherwise. + */ +int +qemuDomainRefreshStatsSchema(virDomainObj *dom) +{ + qemuDomainObjPrivate *priv = dom->privateData; + GHashTable *schema = priv->statsSchema; + + if (schema && g_hash_table_size(schema) > 0) + return 0; + + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_STATS_SCHEMAS)) + return -1; + + qemuDomainObjEnterMonitor(dom); + schema = qemuMonitorQueryStatsSchema(priv->mon, QEMU_MONITOR_QUERY_STATS_PROVIDER_LAST); + qemuDomainObjExitMonitor(dom); + + if (!schema) + return -1; + + g_hash_table_unref(priv->statsSchema); + priv->statsSchema = schema; + + return 0; +} diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index a22deaf113..975fa99cca 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -242,6 +242,8 @@ struct _qemuDomainObjPrivate { unsigned long long originalMemlock; /* Original RLIMIT_MEMLOCK, zero if no * restore will be required later */ + + GHashTable *statsSchema; /* (name, data) pair for stats */ }; #define QEMU_DOMAIN_PRIVATE(vm) \ @@ -1098,3 +1100,6 @@ qemuDomainRemoveLogs(virQEMUDriver *driver, int qemuDomainObjWait(virDomainObj *vm); + +int +qemuDomainRefreshStatsSchema(virDomainObj *dom);