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