This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/master by this push:
new 47419df CLOUDSTACK-10039: Adding used IOPS to storage pool response
(#2294)
47419df is described below
commit 47419df368336b089814d66f4a70afeae9e1ba47
Author: Syed Mushtaq Ahmed <[email protected]>
AuthorDate: Fri Dec 15 07:42:13 2017 -0500
CLOUDSTACK-10039: Adding used IOPS to storage pool response (#2294)
This change adds allocatediops to the ListStoragePool API. This applies to
managed storage where we have a guaranteed minimum IOPS set. This is useful for
monitoring if we have reached the IOPS limit on a storage cluster.
---
.../cloudstack/api/response/StoragePoolResponse.java | 8 ++++++++
.../cloud/api/query/dao/StoragePoolJoinDaoImpl.java | 19 +++++++++++++++++++
ui/l10n/en.js | 1 +
ui/scripts/system.js | 9 +++++++++
4 files changed, 37 insertions(+)
diff --git
a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
index 02d5c44..a03c2d8 100644
--- a/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
+++ b/api/src/org/apache/cloudstack/api/response/StoragePoolResponse.java
@@ -93,6 +93,10 @@ public class StoragePoolResponse extends BaseResponse {
@Param(description = "IOPS CloudStack can provision from this storage
pool")
private Long capacityIops;
+ @SerializedName("allocatediops")
+ @Param(description = "total min IOPS currently in use by volumes")
+ private Long allocatedIops;
+
@SerializedName("tags")
@Param(description = "the tags for the storage pool")
private String tags;
@@ -288,6 +292,10 @@ public class StoragePoolResponse extends BaseResponse {
this.capacityIops = capacityIops;
}
+ public void setAllocatedIops(Long allocatedIops) {
+ this.allocatedIops = allocatedIops;
+ }
+
public String getTags() {
return tags;
}
diff --git a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
index 37fdaef..b8b312b 100644
--- a/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
+++ b/server/src/com/cloud/api/query/dao/StoragePoolJoinDaoImpl.java
@@ -19,6 +19,7 @@ package com.cloud.api.query.dao;
import com.cloud.api.ApiDBUtils;
import com.cloud.api.query.vo.StoragePoolJoinVO;
import com.cloud.capacity.CapacityManager;
+import com.cloud.storage.DataStoreRole;
import com.cloud.storage.StoragePool;
import com.cloud.storage.StorageStats;
import com.cloud.utils.StringUtils;
@@ -26,7 +27,11 @@ import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import org.apache.cloudstack.api.response.StoragePoolResponse;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
+import
org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreDriver;
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -41,6 +46,12 @@ public class StoragePoolJoinDaoImpl extends
GenericDaoBase<StoragePoolJoinVO, Lo
@Inject
private ConfigurationDao _configDao;
+ @Inject
+ private DataStoreManager dataStoreMgr;
+
+ @Inject
+ protected PrimaryDataStoreDao storagePoolDao;
+
private final SearchBuilder<StoragePoolJoinVO> spSearch;
private final SearchBuilder<StoragePoolJoinVO> spIdSearch;
@@ -60,6 +71,7 @@ public class StoragePoolJoinDaoImpl extends
GenericDaoBase<StoragePoolJoinVO, Lo
@Override
public StoragePoolResponse newStoragePoolResponse(StoragePoolJoinVO pool) {
+ StoragePool storagePool = storagePoolDao.findById(pool.getId());
StoragePoolResponse poolResponse = new StoragePoolResponse();
poolResponse.setId(pool.getUuid());
poolResponse.setName(pool.getName());
@@ -87,6 +99,13 @@ public class StoragePoolJoinDaoImpl extends
GenericDaoBase<StoragePoolJoinVO, Lo
poolResponse.setDiskSizeAllocated(allocatedSize);
poolResponse.setCapacityIops(pool.getCapacityIops());
+ if (storagePool.isManaged()) {
+ DataStore store = dataStoreMgr.getDataStore(pool.getId(),
DataStoreRole.Primary);
+ PrimaryDataStoreDriver driver = (PrimaryDataStoreDriver)
store.getDriver();
+ long usedIops = driver.getUsedIops(storagePool);
+ poolResponse.setAllocatedIops(usedIops);
+ }
+
// TODO: StatsCollector does not persist data
StorageStats stats = ApiDBUtils.getStoragePoolStatistics(pool.getId());
if (stats != null) {
diff --git a/ui/l10n/en.js b/ui/l10n/en.js
index 3d0c421..19b5cd4 100644
--- a/ui/l10n/en.js
+++ b/ui/l10n/en.js
@@ -664,6 +664,7 @@ var dictionary = {"ICMP.code":"ICMP Code",
"label.disk.iops.min":"Min IOPS",
"label.disk.iops.read.rate":"Disk Read Rate (IOPS)",
"label.disk.iops.total":"IOPS Total",
+"label.disk.iops.allocated":"IOPS Allocated",
"label.disk.iops.write.rate":"Disk Write Rate (IOPS)",
"label.disk.offering":"Disk Offering",
"label.disk.offering.details":"Disk offering details",
diff --git a/ui/scripts/system.js b/ui/scripts/system.js
index fc9b4b8..fbcfb72 100755
--- a/ui/scripts/system.js
+++ b/ui/scripts/system.js
@@ -18778,6 +18778,15 @@
return ""; else
return args;
}
+ },
+ allocatediops: {
+ label: 'label.disk.iops.allocated',
+ isEditable: false,
+ converter: function (args) {
+ if (args == null || args == 0)
+ return ""; else
+ return args;
+ }
}
}],
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].