From 842900dc1ec4de99fe41de8a115dddc1d1d42ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Fri, 22 Jan 2021 14:47:32 +0000 Subject: [PATCH] conf: record deprecation messages against the domain MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These messages will be stored in the live status XML. Reviewed-by: Michal Privoznik Signed-off-by: Daniel P. Berrangé --- src/conf/domain_conf.c | 28 +++++++++++++++++++++++++--- src/conf/domain_conf.h | 4 ++++ src/libvirt_private.syms | 1 + 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 17e0d1ed31..922310954b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1788,6 +1788,15 @@ bool virDomainObjTaint(virDomainObjPtr obj, } +void virDomainObjDeprecation(virDomainObjPtr obj, + const char *msg) +{ + obj->deprecations = g_renew(char *, obj->deprecations, + obj->ndeprecations + 1); + obj->deprecations[obj->ndeprecations++] = g_strdup(msg); +} + + static void virDomainGraphicsAuthDefClear(virDomainGraphicsAuthDefPtr def) { @@ -21258,7 +21267,8 @@ virDomainObjParseXML(xmlDocPtr xml, int reason = 0; void *parseOpaque = NULL; g_autofree char *tmp = NULL; - g_autofree xmlNodePtr *nodes = NULL; + g_autofree xmlNodePtr *taintNodes = NULL; + g_autofree xmlNodePtr *depNodes = NULL; if (!(obj = virDomainObjNew(xmlopt))) return NULL; @@ -21305,10 +21315,10 @@ virDomainObjParseXML(xmlDocPtr xml, } obj->pid = (pid_t)val; - if ((n = virXPathNodeSet("./taint", ctxt, &nodes)) < 0) + if ((n = virXPathNodeSet("./taint", ctxt, &taintNodes)) < 0) goto error; for (i = 0; i < n; i++) { - char *str = virXMLPropString(nodes[i], "flag"); + char *str = virXMLPropString(taintNodes[i], "flag"); if (str) { int flag = virDomainTaintTypeFromString(str); if (flag < 0) { @@ -21322,6 +21332,13 @@ virDomainObjParseXML(xmlDocPtr xml, } } + if ((n = virXPathNodeSet("./deprecation", ctxt, &depNodes)) < 0) + goto error; + for (i = 0; i < n; i++) { + g_autofree char *str = virXMLNodeContentString(depNodes[i]); + virDomainObjDeprecation(obj, str); + } + if (xmlopt->privateData.parse && xmlopt->privateData.parse(ctxt, obj, &xmlopt->config) < 0) goto error; @@ -29166,6 +29183,11 @@ virDomainObjFormat(virDomainObjPtr obj, virDomainTaintTypeToString(i)); } + for (i = 0; i < obj->ndeprecations; i++) { + virBufferEscapeString(&buf, "%s\n", + obj->deprecations[i]); + } + if (xmlopt->privateData.format && xmlopt->privateData.format(&buf, obj) < 0) return NULL; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index e263e6098b..98458c9e74 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2804,6 +2804,8 @@ struct _virDomainObj { void (*privateDataFreeFunc)(void *); int taint; + size_t ndeprecations; + char **deprecations; unsigned long long original_memlock; /* Original RLIMIT_MEMLOCK, zero if no * restore will be required later */ @@ -3061,6 +3063,8 @@ void virDomainObjEndAPI(virDomainObjPtr *vm); bool virDomainObjTaint(virDomainObjPtr obj, virDomainTaintFlags taint); +void virDomainObjDeprecation(virDomainObjPtr obj, + const char *msg); void virDomainObjBroadcast(virDomainObjPtr vm); int virDomainObjWait(virDomainObjPtr vm); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 49e665a5f0..5829916c68 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -548,6 +548,7 @@ virDomainObjAssignDef; virDomainObjBroadcast; virDomainObjCheckActive; virDomainObjCopyPersistentDef; +virDomainObjDeprecation; virDomainObjEndAPI; virDomainObjFormat; virDomainObjGetDefs;