Repository: cloudstack
Updated Branches:
  refs/heads/master 52bc08423 -> 2042660a6


Added a "long getUsedIops(StoragePool)" method to the PrimaryDataStoreDriver 
interface


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/2042660a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/2042660a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/2042660a

Branch: refs/heads/master
Commit: 2042660a68576b366a3478c6c6ee10516f9c21e7
Parents: 52bc084
Author: Mike Tutkowski <[email protected]>
Authored: Wed Nov 12 12:50:33 2014 -0700
Committer: Mike Tutkowski <[email protected]>
Committed: Wed Nov 12 13:38:58 2014 -0700

----------------------------------------------------------------------
 .../api/storage/PrimaryDataStoreDriver.java     |  5 +++++
 .../test/FakePrimaryDataStoreDriver.java        |  5 +++++
 .../CloudStackPrimaryDataStoreDriverImpl.java   |  5 +++++
 .../driver/NexentaPrimaryDataStoreDriver.java   |  5 +++++
 .../SamplePrimaryDataStoreDriverImpl.java       |  5 +++++
 .../driver/SolidFirePrimaryDataStoreDriver.java | 22 +++++++++++++++-----
 .../com/cloud/capacity/CapacityManagerImpl.java | 14 ++++++-------
 7 files changed, 48 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2042660a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git 
a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
 
b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
index ebaa260..5e7090d 100644
--- 
a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
+++ 
b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreDriver.java
@@ -41,6 +41,11 @@ public interface PrimaryDataStoreDriver extends 
DataStoreDriver {
     // if not managed storage, return 0
     public long getUsedBytes(StoragePool storagePool);
 
+    // intended for managed storage (cloud.storage_pool.managed = true)
+    // if managed storage, return the total number of IOPS currently in use 
for the storage pool in question
+    // if not managed storage, return 0
+    public long getUsedIops(StoragePool storagePool);
+
     public void takeSnapshot(SnapshotInfo snapshot, 
AsyncCompletionCallback<CreateCmdResult> callback);
 
     public void revertSnapshot(SnapshotInfo snapshot, 
AsyncCompletionCallback<CommandResult> callback);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2042660a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git 
a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
 
b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
index 4810fbd..1f1ba24 100644
--- 
a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
+++ 
b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/FakePrimaryDataStoreDriver.java
@@ -60,6 +60,11 @@ public class FakePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
     }
 
     @Override
+    public long getUsedIops(StoragePool storagePool) {
+        return 0;
+    }
+
+    @Override
     public long getVolumeSizeIncludingHypervisorSnapshotReserve(Volume volume, 
StoragePool pool) {
         return volume.getSize();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2042660a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git 
a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
 
b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
index 9421102..e416bf8 100644
--- 
a/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
+++ 
b/plugins/storage/volume/default/src/org/apache/cloudstack/storage/datastore/driver/CloudStackPrimaryDataStoreDriverImpl.java
@@ -163,6 +163,11 @@ public class CloudStackPrimaryDataStoreDriverImpl 
implements PrimaryDataStoreDri
     }
 
     @Override
+    public long getUsedIops(StoragePool storagePool) {
+        return 0;
+    }
+
+    @Override
     public long getVolumeSizeIncludingHypervisorSnapshotReserve(Volume volume, 
StoragePool pool) {
         return volume.getSize();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2042660a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git 
a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
 
b/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
index bae54f1..7ce46a2 100644
--- 
a/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
+++ 
b/plugins/storage/volume/nexenta/src/org/apache/cloudstack/storage/datastore/driver/NexentaPrimaryDataStoreDriver.java
@@ -73,6 +73,11 @@ public class NexentaPrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
     }
 
     @Override
+    public long getUsedIops(StoragePool storagePool) {
+        return 0;
+    }
+
+    @Override
     public long getVolumeSizeIncludingHypervisorSnapshotReserve(Volume volume, 
StoragePool pool) {
         return 0;  //To change body of implemented methods use File | Settings 
| File Templates.
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2042660a/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git 
a/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
 
b/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
index 6ff62e9..7c989d2 100644
--- 
a/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
+++ 
b/plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java
@@ -93,6 +93,11 @@ public class SamplePrimaryDataStoreDriverImpl implements 
PrimaryDataStoreDriver
     }
 
     @Override
+    public long getUsedIops(StoragePool storagePool) {
+        return 0;
+    }
+
+    @Override
     public long getVolumeSizeIncludingHypervisorSnapshotReserve(Volume volume, 
StoragePool pool) {
         return volume.getSize();
     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2042660a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git 
a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
 
b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
index 008693c..485cffa 100644
--- 
a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
+++ 
b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidFirePrimaryDataStoreDriver.java
@@ -48,7 +48,6 @@ import com.cloud.agent.api.to.DataObjectType;
 import com.cloud.agent.api.to.DataStoreTO;
 import com.cloud.agent.api.to.DataTO;
 import com.cloud.agent.api.to.DiskTO;
-import com.cloud.capacity.CapacityManager;
 import com.cloud.dc.ClusterVO;
 import com.cloud.dc.ClusterDetailsVO;
 import com.cloud.dc.ClusterDetailsDao;
@@ -79,7 +78,6 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
 
     @Inject private AccountDao _accountDao;
     @Inject private AccountDetailsDao _accountDetailsDao;
-    @Inject private CapacityManager _capacityMgr;
     @Inject private ClusterDao _clusterDao;
     @Inject private ClusterDetailsDao _clusterDetailsDao;
     @Inject private HostDao _hostDao;
@@ -306,6 +304,21 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
     }
 
     @Override
+    public long getUsedIops(StoragePool storagePool) {
+        long usedIops = 0;
+
+        List<VolumeVO> volumes = _volumeDao.findByPoolId(storagePool.getId(), 
null);
+
+        if (volumes != null) {
+            for (VolumeVO volume : volumes) {
+                usedIops += volume.getMinIops() != null ? volume.getMinIops() 
: 0;
+            }
+        }
+
+        return usedIops;
+    }
+
+    @Override
     public long getVolumeSizeIncludingHypervisorSnapshotReserve(Volume volume, 
StoragePool pool) {
         long volumeSize = volume.getSize();
         Integer hypervisorSnapshotReserve = 
volume.getHypervisorSnapshotReserve();
@@ -536,9 +549,8 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
 
             storagePool.setUsedBytes(usedBytes);
 
-            /** @todo Mike T. fill in the CloudStackVolumeSize */
             long sfNewVolumeId = 
SolidFireUtil.createSolidFireVolume(sfConnection, snapshotInfo.getUuid(), 
sfVolume.getAccountId(), sfVolumeSize,
-                    sfVolume.isEnable512e(), "", sfVolume.getMinIops(), 
sfVolume.getMaxIops(), sfVolume.getBurstIops());
+                    sfVolume.isEnable512e(), 
NumberFormat.getInstance().format(volumeInfo.getSize()), sfVolume.getMinIops(), 
50000, 75000);
 
             // Now that we have successfully created a volume, update the 
space usage in the storage_pool table
             // (even though storage_pool.used_bytes is likely no longer in 
use).
@@ -691,7 +703,7 @@ public class SolidFirePrimaryDataStoreDriver implements 
PrimaryDataStoreDriver {
 
         // if the desire is for more IOPS
         if (diffInMinIops > 0) {
-            long usedIops = _capacityMgr.getUsedIops(storagePool);
+            long usedIops = getUsedIops(storagePool);
             long capacityIops = storagePool.getCapacityIops();
 
             if (usedIops + diffInMinIops > capacityIops) {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/2042660a/server/src/com/cloud/capacity/CapacityManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/capacity/CapacityManagerImpl.java 
b/server/src/com/cloud/capacity/CapacityManagerImpl.java
index 6866444..a5521cc 100755
--- a/server/src/com/cloud/capacity/CapacityManagerImpl.java
+++ b/server/src/com/cloud/capacity/CapacityManagerImpl.java
@@ -77,7 +77,6 @@ import com.cloud.service.dao.ServiceOfferingDao;
 import com.cloud.storage.StorageManager;
 import com.cloud.storage.VMTemplateStoragePoolVO;
 import com.cloud.storage.VMTemplateVO;
-import com.cloud.storage.VolumeVO;
 import com.cloud.storage.dao.VMTemplatePoolDao;
 import com.cloud.storage.dao.VolumeDao;
 import com.cloud.utils.DateUtil;
@@ -531,17 +530,16 @@ public class CapacityManagerImpl extends ManagerBase 
implements CapacityManager,
 
     @Override
     public long getUsedIops(StoragePoolVO pool) {
-        long usedIops = 0;
+        DataStoreProvider storeProvider = 
_dataStoreProviderMgr.getDataStoreProvider(pool.getStorageProviderName());
+        DataStoreDriver storeDriver = storeProvider.getDataStoreDriver();
 
-        List<VolumeVO> volumes = _volumeDao.findByPoolId(pool.getId(), null);
+        if (storeDriver instanceof PrimaryDataStoreDriver) {
+            PrimaryDataStoreDriver primaryStoreDriver = 
(PrimaryDataStoreDriver)storeDriver;
 
-        if (volumes != null) {
-            for (VolumeVO volume : volumes) {
-                usedIops += volume.getMinIops() != null ? volume.getMinIops() 
: 0;
-            }
+            return primaryStoreDriver.getUsedIops(pool);
         }
 
-        return usedIops;
+        throw new CloudRuntimeException("Storage driver in 
CapacityManagerImpl.getUsedIops(StoragePoolVO) is not a 
PrimaryDataStoreDriver.");
     }
 
     @Override

Reply via email to