[PATCH 0/2] versions of: save status xml after generating taint message

Both of these patches solve the same bug and only one needs to be merged. The first one is a bit longer, but I think it is more effective (because of function qemuDomainObjCheckTaint, where qemuDomainObjTaint could be potentially called in multiple for cycles). The second one is short and probably more readable. I will leave it up to the reviewer to choose one. Kristina Hanicova (2): qemu: save status xml after generating taint message qemu: save status xml after generating taint message src/qemu/qemu_domain.c | 14 ++++++++++++++ src/qemu/qemu_domain.h | 5 +++++ src/qemu/qemu_driver.c | 4 ++-- 3 files changed, 21 insertions(+), 2 deletions(-) -- 2.31.1

We didn't always save status xml after generating new taint message, which resulted in it being deleted in case of a libvirtd restart. Some taint messages were preserved thanks to saving status xml separately at the end of the calling functions (which makes sense, because qemuDomainObjTaint was usually called there multiple times). But for special cases (e.g. When only few taint messages are generated) we need a separate function for generating them and saving status xml explicitly. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1965589 Signed-off-by: Kristina Hanicova <khanicov@redhat.com> --- src/qemu/qemu_domain.c | 11 +++++++++++ src/qemu/qemu_domain.h | 5 +++++ src/qemu/qemu_driver.c | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 7e2efc8168..ce55ac39c1 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6464,6 +6464,17 @@ void qemuDomainObjTaint(virQEMUDriver *driver, qemuDomainObjTaintMsg(driver, obj, taint, logCtxt, NULL); } +void qemuDomainObjTaintAndSave(virQEMUDriver *driver, + virDomainObj *obj, + virDomainTaintFlags taint, + qemuDomainLogContext *logCtxt) +{ + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); + + qemuDomainObjTaintMsg(driver, obj, taint, logCtxt, NULL); + ignore_value(virDomainObjSave(obj, driver->xmlopt, cfg->stateDir)); +} + void qemuDomainObjTaintMsg(virQEMUDriver *driver, virDomainObj *obj, virDomainTaintFlags taint, diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index acf6ca5ab6..9bd711cbd4 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -568,6 +568,11 @@ void qemuDomainObjTaint(virQEMUDriver *driver, virDomainTaintFlags taint, qemuDomainLogContext *logCtxt); +void qemuDomainObjTaintAndSave(virQEMUDriver *driver, + virDomainObj *obj, + virDomainTaintFlags taint, + qemuDomainLogContext *logCtxt); + void qemuDomainObjTaintMsg(virQEMUDriver *driver, virDomainObj *obj, virDomainTaintFlags taint, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0b35bbc15c..195c0ba7a0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14010,7 +14010,7 @@ static int qemuDomainQemuMonitorCommand(virDomainPtr domain, const char *cmd, priv = vm->privateData; - qemuDomainObjTaint(driver, vm, VIR_DOMAIN_TAINT_CUSTOM_MONITOR, NULL); + qemuDomainObjTaintAndSave(driver, vm, VIR_DOMAIN_TAINT_CUSTOM_MONITOR, NULL); hmp = !!(flags & VIR_DOMAIN_QEMU_MONITOR_COMMAND_HMP); @@ -16877,7 +16877,7 @@ qemuDomainQemuAgentCommand(virDomainPtr domain, if (!qemuDomainAgentAvailable(vm, true)) goto endjob; - qemuDomainObjTaint(driver, vm, VIR_DOMAIN_TAINT_CUSTOM_GA_COMMAND, NULL); + qemuDomainObjTaintAndSave(driver, vm, VIR_DOMAIN_TAINT_CUSTOM_GA_COMMAND, NULL); agent = qemuDomainObjEnterAgent(vm); ret = qemuAgentArbitraryCommand(agent, cmd, &result, timeout); -- 2.31.1

We didn't always save status xml after generating new taint message which resulted in it being deleted in case of a libvirtd restart. Some taint messages were preserved thanks to saving status xml separately at the end of the calling functions. With this, every taint message is saved, regardless of the calling functions. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1965589 Signed-off-by: Kristina Hanicova <khanicov@redhat.com> --- src/qemu/qemu_domain.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index ce55ac39c1..5e96ea84ff 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6461,7 +6461,10 @@ void qemuDomainObjTaint(virQEMUDriver *driver, virDomainTaintFlags taint, qemuDomainLogContext *logCtxt) { + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); + qemuDomainObjTaintMsg(driver, obj, taint, logCtxt, NULL); + ignore_value(virDomainObjSave(obj, driver->xmlopt, cfg->stateDir)); } void qemuDomainObjTaintAndSave(virQEMUDriver *driver, -- 2.31.1

On a %A in %Y, Kristina Hanicova wrote:
We didn't always save status xml after generating new taint message which resulted in it being deleted in case of a libvirtd restart. Some taint messages were preserved thanks to saving status xml separately at the end of the calling functions. With this, every taint message is saved, regardless of the calling functions.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1965589
Signed-off-by: Kristina Hanicova <khanicov@redhat.com> --- src/qemu/qemu_domain.c | 3 +++ 1 file changed, 3 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> I will push tomorrow. Jano
participants (2)
-
Jano Tomko
-
Kristina Hanicova