[libvirt] [PATCH 7/7] storage: Create/Delete pool status XML

Erik Skultety eskultet at redhat.com
Tue Mar 24 10:06:55 UTC 2015


Once we introduced virStoragePoolSaveStatus function, create a status
XML every time a pool is created (virStoragePoolCreate,
                                  storageDriverAutostart)

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1177733
---
 src/storage/storage_driver.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 2899521..4ce3d34 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -136,6 +136,7 @@ static void
 storageDriverAutostart(void)
 {
     size_t i;
+    char *stateFile = NULL;
     virConnectPtr conn = NULL;
 
     /* XXX Remove hardcoding of QEMU URI */
@@ -183,6 +184,12 @@ storageDriverAutostart(void)
                 virStoragePoolObjUnlock(pool);
                 continue;
             }
+
+            if (!(stateFile = virFileBuildPath(driver->stateDir,
+                                               pool->def->name, ".xml")))
+                continue;
+
+            ignore_value(virStoragePoolSaveStatus(stateFile, pool->def));
             pool->active = 1;
         }
         virStoragePoolObjUnlock(pool);
@@ -812,6 +819,7 @@ storagePoolCreate(virStoragePoolPtr obj,
     virStoragePoolObjPtr pool;
     virStorageBackendPtr backend;
     int ret = -1;
+    char *stateFile = NULL;
 
     virCheckFlags(0, -1);
 
@@ -840,11 +848,21 @@ storagePoolCreate(virStoragePoolPtr obj,
         goto cleanup;
     }
 
+    /* save pool state */
+    if (!(stateFile = virFileBuildPath(driver->stateDir,
+                                       pool->def->name, ".xml")))
+        goto cleanup;
+
+    if ((ret = virStoragePoolSaveStatus(stateFile,
+                                        pool->def)) < 0)
+        goto cleanup;
+
     VIR_INFO("Starting up storage pool '%s'", pool->def->name);
     pool->active = 1;
     ret = 0;
 
  cleanup:
+    VIR_FREE(stateFile);
     virStoragePoolObjUnlock(pool);
     return ret;
 }
@@ -889,6 +907,7 @@ storagePoolDestroy(virStoragePoolPtr obj)
 {
     virStoragePoolObjPtr pool;
     virStorageBackendPtr backend;
+    char *stateFile = NULL;
     int ret = -1;
 
     storageDriverLock();
@@ -937,6 +956,15 @@ storagePoolDestroy(virStoragePoolPtr obj)
         pool->def = pool->newDef;
         pool->newDef = NULL;
     }
+
+    if (!(stateFile = virFileBuildPath(driver->stateDir,
+                                      pool->def->name,
+                                      ".xml")))
+        goto cleanup;
+
+    unlink(stateFile);
+    VIR_FREE(stateFile);
+
     ret = 0;
 
  cleanup:
@@ -952,6 +980,7 @@ storagePoolDelete(virStoragePoolPtr obj,
 {
     virStoragePoolObjPtr pool;
     virStorageBackendPtr backend;
+    char *stateFile = NULL;
     int ret = -1;
 
     if (!(pool = virStoragePoolObjFromStoragePool(obj)))
@@ -985,6 +1014,14 @@ storagePoolDelete(virStoragePoolPtr obj,
     if (backend->deletePool(obj->conn, pool, flags) < 0)
         goto cleanup;
     VIR_INFO("Deleting storage pool '%s'", pool->def->name);
+
+    if (!(stateFile = virFileBuildPath(driver->stateDir,
+                                      pool->def->name,
+                                      ".xml")))
+        goto cleanup;
+
+    unlink(stateFile);
+    VIR_FREE(stateFile);
     ret = 0;
 
  cleanup:
-- 
1.9.3




More information about the libvir-list mailing list