libvirt patch in master, [PATCH] Send event on persistent config modification

Efim Shevrin posted 1 patch 1 year, 11 months ago
Failed in applying to current master (apply log)
src/qemu/qemu_driver.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
libvirt patch in master, [PATCH] Send event on persistent config modification
Posted by Efim Shevrin 1 year, 11 months ago
From 32dbfbf9857ea72b69ea175ea7f8b21210f4e5d2 Mon Sep 17 00:00:00 2001
From: Efim Shevrin <efim.shevrin@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@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