]> xenbits.xensource.com Git - libvirt.git/commitdiff
metadata: track title edits across libvirtd restart
authorEric Blake <eblake@redhat.com>
Tue, 22 Jul 2014 15:41:05 +0000 (09:41 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 23 Jul 2014 16:07:34 +0000 (10:07 -0600)
https://bugzilla.redhat.com/show_bug.cgi?id=1122205

Although the edits were changing in-memory XML, it was not flushed
to disk; so unless some other action changes XML, a libvirtd restart
would lose the changed information.

* src/conf/domain_conf.c (virDomainObjSetMetadata): Add parameter,
to save live status across restarts.
(virDomainSaveXML): Allow for test driver.
* src/conf/domain_conf.h (virDomainObjSetMetadata): Adjust
signature.
* src/bhyve/bhyve_driver.c (bhyveDomainSetMetadata): Adjust caller.
* src/lxc/lxc_driver.c (lxcDomainSetMetadata): Likewise.
* src/qemu/qemu_driver.c (qemuDomainSetMetadata): Likewise.
* src/test/test_driver.c (testDomainSetMetadata): Likewise.

Signed-off-by: Eric Blake <eblake@redhat.com>
src/bhyve/bhyve_driver.c
src/conf/domain_conf.c
src/conf/domain_conf.h
src/lxc/lxc_driver.c
src/qemu/qemu_driver.c
src/test/test_driver.c

index 9a13076236b9689f3a13952e7951747eceaef832..135cb248ea38521a38e662e0a06c6ae4a7637512 100644 (file)
@@ -1046,7 +1046,8 @@ bhyveDomainSetMetadata(virDomainPtr dom,
         goto cleanup;
 
     ret = virDomainObjSetMetadata(vm, type, metadata, key, uri, caps,
-                                  privconn->xmlopt, BHYVE_CONFIG_DIR, flags);
+                                  privconn->xmlopt, BHYVE_STATE_DIR,
+                                  BHYVE_CONFIG_DIR, flags);
 
  cleanup:
     virObjectUnref(caps);
index d8d1fe75855bf4363dbe2de93b74ef74cc92af3b..1fecf9bb54720b7e967011c8f3bc62e16620f215 100644 (file)
@@ -18140,6 +18140,9 @@ virDomainSaveXML(const char *configDir,
     char *configFile = NULL;
     int ret = -1;
 
+    if (!configDir)
+        return 0;
+
     if ((configFile = virDomainConfigFile(configDir, def->name)) == NULL)
         goto cleanup;
 
@@ -19770,6 +19773,7 @@ virDomainObjSetMetadata(virDomainObjPtr vm,
                         const char *uri,
                         virCapsPtr caps,
                         virDomainXMLOptionPtr xmlopt,
+                        const char *stateDir,
                         const char *configDir,
                         unsigned int flags)
 {
@@ -19782,12 +19786,17 @@ virDomainObjSetMetadata(virDomainObjPtr vm,
                                         &persistentDef) < 0)
         return -1;
 
-    if (flags & VIR_DOMAIN_AFFECT_LIVE)
+    if (flags & VIR_DOMAIN_AFFECT_LIVE) {
         if (virDomainDefSetMetadata(vm->def, type, metadata, key, uri) < 0)
             return -1;
 
+        if (virDomainSaveStatus(xmlopt, stateDir, vm) < 0)
+            return -1;
+    }
+
     if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
-        if (virDomainDefSetMetadata(persistentDef, type, metadata, key, uri) < 0)
+        if (virDomainDefSetMetadata(persistentDef, type, metadata, key,
+                                    uri) < 0)
             return -1;
 
         if (virDomainSaveConfig(configDir, persistentDef) < 0)
index 45c8552ce7dc24f66dcc20b787f85ae1653cfb32..d79ef9b2d422446c462df5e13af8281725d78b95 100644 (file)
@@ -2664,6 +2664,7 @@ int virDomainObjSetMetadata(virDomainObjPtr vm,
                             const char *uri,
                             virCapsPtr caps,
                             virDomainXMLOptionPtr xmlopt,
+                            const char *stateDir,
                             const char *configDir,
                             unsigned int flags);
 
index f094f86b0e079b80cce07de583e8f43d4ec79518..05d10b4ade6bb994cd5560baacd64362d8fc55f0 100644 (file)
@@ -5600,7 +5600,8 @@ lxcDomainSetMetadata(virDomainPtr dom,
         goto cleanup;
 
     ret = virDomainObjSetMetadata(vm, type, metadata, key, uri, caps,
-                                  driver->xmlopt, cfg->configDir, flags);
+                                  driver->xmlopt, cfg->stateDir,
+                                  cfg->configDir, flags);
 
  cleanup:
     virObjectUnlock(vm);
index b85d9098e9b56a6d4a4488b67554d328b1fb301a..26db4e92258b33030f13e173dae9bb945626b8cf 100644 (file)
@@ -16118,7 +16118,8 @@ qemuDomainSetMetadata(virDomainPtr dom,
         goto cleanup;
 
     ret = virDomainObjSetMetadata(vm, type, metadata, key, uri, caps,
-                                  driver->xmlopt, cfg->configDir, flags);
+                                  driver->xmlopt, cfg->stateDir,
+                                  cfg->configDir, flags);
 
  cleanup:
     virObjectUnlock(vm);
index 67f637d9ef52b7c134ebaeeb76fd95290c4a54f9..3b22cf6546b0a6987e1dad7fea40674610a68188 100644 (file)
@@ -3042,7 +3042,7 @@ static int testDomainSetMetadata(virDomainPtr dom,
 
     ret = virDomainObjSetMetadata(privdom, type, metadata, key, uri,
                                   privconn->caps, privconn->xmlopt,
-                                  NULL, flags);
+                                  NULL, NULL, flags);
 
  cleanup:
     if (privdom)