]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Introduce virStoragePoolObjNumOfStoragePools
authorJohn Ferlan <jferlan@redhat.com>
Tue, 21 Mar 2017 10:30:46 +0000 (06:30 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Tue, 11 Apr 2017 12:49:51 +0000 (08:49 -0400)
Unify the NumOf[Defined]StoragePools API into virstorageobj.c from
storage_driver and test_driver.  The only real difference between the
two is the test driver doesn't call using the aclfilter API.

Signed-off-by: John Ferlan <jferlan@redhat.com>
src/conf/virstorageobj.c
src/conf/virstorageobj.h
src/libvirt_private.syms
src/storage/storage_driver.c
src/test/test_driver.c

index a4e40f90904957bb5b5c93aff3666b06f1af2699..5112bac92d49b3057cd52f48b6be02363071836c 100644 (file)
@@ -557,6 +557,29 @@ virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool)
 }
 
 
+int
+virStoragePoolObjNumOfStoragePools(virStoragePoolObjListPtr pools,
+                                   virConnectPtr conn,
+                                   bool wantActive,
+                                   virStoragePoolObjListACLFilter aclfilter)
+{
+    int npools = 0;
+    size_t i;
+
+    for (i = 0; i < pools->count; i++) {
+        virStoragePoolObjPtr obj = pools->objs[i];
+        virStoragePoolObjLock(obj);
+        if (!aclfilter || aclfilter(conn, obj->def)) {
+            if (wantActive == virStoragePoolObjIsActive(obj))
+                npools++;
+        }
+        virStoragePoolObjUnlock(obj);
+    }
+
+    return npools;
+}
+
+
 /*
  * virStoragePoolObjIsDuplicate:
  * @doms : virStoragePoolObjListPtr to search
index 72daa5a814357c52bcc21000647805703e565a68..5eeda1e43b0327756e0eb2e13b97704aca5b69bd 100644 (file)
@@ -146,6 +146,15 @@ virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
 int
 virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool);
 
+typedef bool (*virStoragePoolObjListACLFilter)(virConnectPtr conn,
+                                               virStoragePoolDefPtr def);
+
+int
+virStoragePoolObjNumOfStoragePools(virStoragePoolObjListPtr pools,
+                                   virConnectPtr conn,
+                                   bool wantActive,
+                                   virStoragePoolObjListACLFilter aclfilter);
+
 void
 virStoragePoolObjFree(virStoragePoolObjPtr pool);
 
index 8122b9ffda2b1e08b9fff636b9b850291e4e4f31..d8a9c1373de817a03c7fa15c118153d201cd3b81 100644 (file)
@@ -1005,6 +1005,7 @@ virStoragePoolObjListFree;
 virStoragePoolObjLoadAllConfigs;
 virStoragePoolObjLoadAllState;
 virStoragePoolObjLock;
+virStoragePoolObjNumOfStoragePools;
 virStoragePoolObjNumOfVolumes;
 virStoragePoolObjRemove;
 virStoragePoolObjSaveDef;
index 1b2b9dee522d241fb35d48441c7f72e7b8c9c9dd..0ccca85ce57fbebdb289c3becb3b09a7ee4a5d75 100644 (file)
@@ -477,21 +477,14 @@ storagePoolLookupByVolume(virStorageVolPtr vol)
 static int
 storageConnectNumOfStoragePools(virConnectPtr conn)
 {
-    size_t i;
     int nactive = 0;
 
     if (virConnectNumOfStoragePoolsEnsureACL(conn) < 0)
         return -1;
 
     storageDriverLock();
-    for (i = 0; i < driver->pools.count; i++) {
-        virStoragePoolObjPtr obj = driver->pools.objs[i];
-        virStoragePoolObjLock(obj);
-        if (virConnectNumOfStoragePoolsCheckACL(conn, obj->def) &&
-            virStoragePoolObjIsActive(obj))
-            nactive++;
-        virStoragePoolObjUnlock(obj);
-    }
+    nactive = virStoragePoolObjNumOfStoragePools(&driver->pools, conn, true,
+                                                 virConnectNumOfStoragePoolsCheckACL);
     storageDriverUnlock();
 
     return nactive;
@@ -536,21 +529,14 @@ storageConnectListStoragePools(virConnectPtr conn,
 static int
 storageConnectNumOfDefinedStoragePools(virConnectPtr conn)
 {
-    size_t i;
     int nactive = 0;
 
     if (virConnectNumOfDefinedStoragePoolsEnsureACL(conn) < 0)
         return -1;
 
     storageDriverLock();
-    for (i = 0; i < driver->pools.count; i++) {
-        virStoragePoolObjPtr obj = driver->pools.objs[i];
-        virStoragePoolObjLock(obj);
-        if (virConnectNumOfDefinedStoragePoolsCheckACL(conn, obj->def) &&
-            !virStoragePoolObjIsActive(obj))
-            nactive++;
-        virStoragePoolObjUnlock(obj);
-    }
+    nactive = virStoragePoolObjNumOfStoragePools(&driver->pools, conn, false,
+                                                 virConnectNumOfDefinedStoragePoolsCheckACL);
     storageDriverUnlock();
 
     return nactive;
index e0a58cc927911dbdf61d37fa8fbb3380fd296a26..523d7efe4bd256f7280b27d55dc1695a219c778b 100644 (file)
@@ -4102,17 +4102,16 @@ testStoragePoolLookupByVolume(virStorageVolPtr vol)
     return testStoragePoolLookupByName(vol->conn, vol->pool);
 }
 
+
 static int
 testConnectNumOfStoragePools(virConnectPtr conn)
 {
     testDriverPtr privconn = conn->privateData;
     int numActive = 0;
-    size_t i;
 
     testDriverLock(privconn);
-    for (i = 0; i < privconn->pools.count; i++)
-        if (virStoragePoolObjIsActive(privconn->pools.objs[i]))
-            numActive++;
+    numActive = virStoragePoolObjNumOfStoragePools(&privconn->pools, conn,
+                                                   true, NULL);
     testDriverUnlock(privconn);
 
     return numActive;
@@ -4149,20 +4148,16 @@ testConnectListStoragePools(virConnectPtr conn,
     return -1;
 }
 
+
 static int
 testConnectNumOfDefinedStoragePools(virConnectPtr conn)
 {
     testDriverPtr privconn = conn->privateData;
     int numInactive = 0;
-    size_t i;
 
     testDriverLock(privconn);
-    for (i = 0; i < privconn->pools.count; i++) {
-        virStoragePoolObjLock(privconn->pools.objs[i]);
-        if (!virStoragePoolObjIsActive(privconn->pools.objs[i]))
-            numInactive++;
-        virStoragePoolObjUnlock(privconn->pools.objs[i]);
-    }
+    numInactive = virStoragePoolObjNumOfStoragePools(&privconn->pools, conn,
+                                                     false, NULL);
     testDriverUnlock(privconn);
 
     return numInactive;