From 32dbfbf9857ea72b69ea175ea7f8b21210f4e5d2 Mon Sep 17 00:00:00 2001
From: Efim Shevrin <efim.shevrin(a)virtuozzo.com>
Date: Tue, 10 May 2022 17:03:11 +0300
Subject: [PATCH] Send event on persistent config modification
Libvirt is not sending events in case of a device update, thus any services
listening to events are unaware of the changes.This patch suggests to send event in
case of a persistent config modification, it should keep subscribed services in sync with
VM configuration.
Signed-off-by: Efim Shevrin <efim.shevrin(a)virtuozzo.com>
---
src/qemu/qemu_driver.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index e3582f62a7..6008a4c8f3 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -7942,6 +7942,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
virQEMUDriver *driver = dom->conn->privateData;
virDomainObj *vm = NULL;
qemuDomainObjPrivate *priv;
+ virObjectEvent *event = NULL;
g_autoview.settings().get('font_face')ptr(virDomainDef) vmdef = NULL;
g_autoptr(virDomainDeviceDef) dev = NULL;
virDomainDeviceDef *dev_copy = NULL;
@@ -8019,8 +8020,16 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom,
/* Finally, if no error until here, we can save config. */
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
ret = virDomainDefSave(vmdef, driver->xmlopt, cfg->configDir);
- if (!ret)
+ if (!ret) {
virDomainObjAssignDef(vm, &vmdef, false, NULL);
+
+ /* Event sending if persistent config has changed */
+ event = virDomainEventLifecycleNewFromObj(vm,
+ VIR_DOMAIN_EVENT_DEFINED,
+ VIR_DOMAIN_EVENT_DEFINED_UPDATED);
+
+ virObjectEventStateQueue(driver->domainEventState, event);
+ }
}
endjob:
--
2.31.1