From 2ddff1cc40f6d0dd821d9979bef430edefb6a553 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 1 Jul 2021 16:03:56 +0200 Subject: [PATCH] storage_source: Add flag storing whether threshold event was registered with index When users register the threshold event for the top level image with an explicit index (e.g. vda[3]) they are clearly expecting the index in the event. This flag will help avoiding emission of the second event without the index when the client clearly requested one with the index. Signed-off-by: Peter Krempa Reviewed-by: Michal Privoznik --- src/conf/storage_source_conf.h | 5 +++++ src/qemu/qemu_domain.c | 8 ++++++++ tests/qemustatusxml2xmldata/modern-in.xml | 1 + 3 files changed, 14 insertions(+) diff --git a/src/conf/storage_source_conf.h b/src/conf/storage_source_conf.h index 389c7b56d1..40db29c418 100644 --- a/src/conf/storage_source_conf.h +++ b/src/conf/storage_source_conf.h @@ -387,6 +387,11 @@ struct _virStorageSource { char *nfs_group; uid_t nfs_uid; gid_t nfs_gid; + + /* We need a flag to remember that the threshold event for this source was + * registered with a full index (vda[3]) so that we can properly report just + * one event for it */ + bool thresholdEventWithIndex; }; G_DEFINE_AUTOPTR_CLEANUP_FUNC(virStorageSource, virObjectUnref); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 5fcd5e7f82..89e03fdf72 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1951,6 +1951,7 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt, g_autofree char *encalias = NULL; g_autofree char *httpcookiealias = NULL; g_autofree char *tlskeyalias = NULL; + g_autofree char *thresholdEventWithIndex = NULL; src->nodestorage = virXPathString("string(./nodenames/nodename[@type='storage']/@name)", ctxt); src->nodeformat = virXPathString("string(./nodenames/nodename[@type='format']/@name)", ctxt); @@ -1990,6 +1991,10 @@ qemuStorageSourcePrivateDataParse(xmlXPathContextPtr ctxt, if (virStorageSourcePrivateDataParseRelPath(ctxt, src) < 0) return -1; + if ((thresholdEventWithIndex = virXPathString("string(./thresholdEvent/@indexUsed)", ctxt)) && + virTristateBoolTypeFromString(thresholdEventWithIndex) == VIR_TRISTATE_BOOL_YES) + src->thresholdEventWithIndex = true; + return 0; } @@ -2044,6 +2049,9 @@ qemuStorageSourcePrivateDataFormat(virStorageSource *src, virXMLFormatElement(buf, "objects", NULL, &tmp); + if (src->thresholdEventWithIndex) + virBufferAddLit(buf, "\n"); + return 0; } diff --git a/tests/qemustatusxml2xmldata/modern-in.xml b/tests/qemustatusxml2xmldata/modern-in.xml index ba0858a4ff..cc5fd1cb74 100644 --- a/tests/qemustatusxml2xmldata/modern-in.xml +++ b/tests/qemustatusxml2xmldata/modern-in.xml @@ -340,6 +340,7 @@ +