[libvirt PATCH 5/6] Make PATHs unique for a VM object instance

Daniel P. Berrangé berrange at redhat.com
Mon Feb 3 12:43:32 UTC 2020


From: Shaju Abraham <shaju.abraham at nutanix.com>

There are various config paths that a VM uses. The monitor paths and
other lib paths are examples. These paths are tied to the VM name or
UUID. The local migration breaks the assumption that there will be only
one VM with a unique UUID and name. During local migrations there can be
multiple VMs with same name and UUID in the same host. Append the
domain-id field to the path so that there is no duplication of path
names.

Signed-off-by: Shaju Abraham <shaju.abraham at nutanix.com>
---
 src/qemu/qemu_conf.c   |  4 ++--
 src/qemu/qemu_domain.c | 16 ++++++++++------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 00801ef01b..6769736d58 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1894,7 +1894,7 @@ qemuGetDomainHugepagePath(const virDomainDef *def,
     char *ret = NULL;
 
     if (base && domPath)
-        ret = g_strdup_printf("%s/%s", base, domPath);
+        ret = g_strdup_printf("%s/%s-%d", base, domPath, def->id);
     return ret;
 }
 
@@ -1962,7 +1962,7 @@ qemuGetMemoryBackingDomainPath(const virDomainDef *def,
         return -1;
 
     qemuGetMemoryBackingBasePath(cfg, &base);
-    *path = g_strdup_printf("%s/%s", base, shortName);
+    *path = g_strdup_printf("%s/%s-%d", base, shortName, def->id);
 
     return 0;
 }
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index b0c0e1a19b..002c092cf8 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2127,11 +2127,13 @@ qemuDomainSetPrivatePathsOld(virQEMUDriverPtr driver,
     virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
 
     if (!priv->libDir)
-        priv->libDir = g_strdup_printf("%s/domain-%s", cfg->libDir, vm->def->name);
+        priv->libDir = g_strdup_printf("%s/domain-%s-%d", cfg->libDir,
+                                       vm->def->name, vm->def->id);
 
     if (!priv->channelTargetDir)
-        priv->channelTargetDir = g_strdup_printf("%s/domain-%s",
-                                                 cfg->channelTargetDir, vm->def->name);
+        priv->channelTargetDir = g_strdup_printf("%s/domain-%s-%d",
+                                                 cfg->channelTargetDir,
+                                                 vm->def->name, vm->def->id);
 
     virObjectUnref(cfg);
 }
@@ -2150,11 +2152,13 @@ qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
         goto cleanup;
 
     if (!priv->libDir)
-        priv->libDir = g_strdup_printf("%s/domain-%s", cfg->libDir, domname);
+        priv->libDir = g_strdup_printf("%s/domain-%s-%d", cfg->libDir, domname,
+                                       vm->def->id);
 
     if (!priv->channelTargetDir)
-        priv->channelTargetDir = g_strdup_printf("%s/domain-%s",
-                                                 cfg->channelTargetDir, domname);
+        priv->channelTargetDir = g_strdup_printf("%s/domain-%s-%d",
+                                                 cfg->channelTargetDir,
+                                                 domname, vm->def->id);
 
     ret = 0;
  cleanup:
-- 
2.24.1




More information about the libvir-list mailing list