use of com.emc.storageos.model.vpool.CapacityResponse in project coprhd-controller by CoprHD.
the class ComputeUtils method isCapacityAvailable.
protected static boolean isCapacityAvailable(ViPRCoreClient client, URI virtualPool, URI virtualArray, Double sizeOfBootVolumesInGb, Integer numVols) {
// Check for pool capacity
CapacityResponse capacityResponse = client.blockVpools().getCapacityOnVirtualArray(virtualPool, virtualArray);
String size = capacityResponse.getFreeGb();
long freeCapacity = Long.parseLong(size);
double reqSize = sizeOfBootVolumesInGb * numVols;
long reqCapacity = (long) reqSize;
if ((reqSize - reqCapacity) > 0) {
// round up
reqCapacity++;
}
return reqCapacity > freeCapacity ? false : true;
}
use of com.emc.storageos.model.vpool.CapacityResponse in project coprhd-controller by CoprHD.
the class CapacityUtils method getCapacityForVirtualPoolAndVirtualArray.
public static CapacityResponse getCapacityForVirtualPoolAndVirtualArray(VirtualPool vPool, URI vArrayId, DbClient dbClient, CoordinatorClient coordinator) {
List<StoragePool> validPoolsOfvPool = VirtualPool.getValidStoragePools(vPool, dbClient, false);
List<StoragePool> invalidPoolsOfvPool = VirtualPool.getInvalidStoragePools(vPool, dbClient);
Map<String, Object> attributeMap = new ProvisioningAttributeMapBuilder(0L, vArrayId.toString(), 0L).buildMap();
NeighborhoodsMatcher matcher = new NeighborhoodsMatcher();
matcher.setCoordinatorClient(coordinator);
matcher.setObjectCache(new ObjectLocalCache(dbClient));
StringBuffer errorMessageForValidPools = new StringBuffer();
StringBuffer errorMessageForInValidPools = new StringBuffer();
validPoolsOfvPool = matcher.runMatchStoragePools(validPoolsOfvPool, attributeMap, errorMessageForValidPools);
invalidPoolsOfvPool = matcher.runMatchStoragePools(invalidPoolsOfvPool, attributeMap, errorMessageForInValidPools);
List<StoragePool> validPools = new ArrayList<StoragePool>();
for (StoragePool pool : validPoolsOfvPool) {
if (StoragePool.RegistrationStatus.REGISTERED.toString().equals(pool.getRegistrationStatus()) && CompatibilityStatus.COMPATIBLE.toString().equals(pool.getCompatibilityStatus()) && DiscoveryStatus.VISIBLE.toString().equals(pool.getDiscoveryStatus())) {
validPools.add(pool);
} else {
invalidPoolsOfvPool.add(pool);
}
}
Map<String, BigInteger> rawCapacityMetrics = getPoolCapacityMetrics(validPools, vPool, dbClient, coordinator);
Set<String> poolSet = new HashSet<String>();
for (StoragePool pool : validPools) {
poolSet.add(pool.getId().toString());
}
Capacity capacity = getVirtualPoolCapacityForPools(dbClient, vPool.getId(), VirtualPool.Type.valueOf(vPool.getType()), poolSet);
poolSet.clear();
for (StoragePool pool : invalidPoolsOfvPool) {
poolSet.add(pool.getId().toString());
}
Capacity invalidPoolCapacity = getVirtualPoolCapacityForPools(dbClient, vPool.getId(), VirtualPool.Type.valueOf(vPool.getType()), poolSet);
// Free Capacity is rounded down
BigInteger freeCapacity = rawCapacityMetrics.get(StorageMetrics.FREE.toString());
freeCapacity = freeCapacity.divide(kbToGB_BI);
long freeCapacityGb = freeCapacity.longValue();
BigInteger netFreeCapacity = rawCapacityMetrics.get(StorageMetrics.NET_FREE.toString());
netFreeCapacity = netFreeCapacity.divide(kbToGB_BI);
long netFreeCapacityGb = netFreeCapacity.longValue();
// 4) Check netFreeCapacity against Quota
if (vPool.getQuotaEnabled()) {
long netFreeQuota = vPool.getQuota() - (long) ((capacity._provisionedCapacity + invalidPoolCapacity._provisionedCapacity) / GB);
if (netFreeQuota < 0) {
netFreeCapacityGb = 0;
} else if (netFreeQuota < netFreeCapacityGb) {
netFreeCapacityGb = netFreeQuota;
}
}
// Used Capacity is rounded up.
BigDecimal[] result = new BigDecimal(capacity._usedCapacity + invalidPoolCapacity._usedCapacity).divideAndRemainder(new BigDecimal(GB));
long usedCapacityGb = result[0].longValue();
if (!result[1].equals(BigDecimal.ZERO)) {
usedCapacityGb += 1;
}
// Subscribed Capacity is rounded up.
result = new BigDecimal(capacity._provisionedCapacity + invalidPoolCapacity._provisionedCapacity).divideAndRemainder(new BigDecimal(GB));
long subscribedCapacityGb = result[0].longValue();
if (!result[1].equals(BigDecimal.ZERO)) {
subscribedCapacityGb += 1;
}
long totalCapacityGB = freeCapacityGb + usedCapacityGb;
CapacityResponse response = new CapacityResponse();
response.setFreeGb(Long.toString(freeCapacityGb));
response.setNetFreeGb(Long.toString(netFreeCapacityGb));
response.setProvissionedGb(Long.toString(subscribedCapacityGb));
response.setUsedGb(Long.toString(usedCapacityGb));
if (totalCapacityGB != 0) {
result = new BigDecimal(subscribedCapacityGb * 100).divideAndRemainder(new BigDecimal(totalCapacityGB));
int percentage = result[0].intValue();
if (!result[1].equals(BigDecimal.ZERO)) {
percentage += 1;
}
response.setPercentProvisioned(Integer.toString(percentage));
result = new BigDecimal(usedCapacityGb * 100).divideAndRemainder(new BigDecimal(totalCapacityGB));
percentage = result[0].intValue();
if (!result[1].equals(BigDecimal.ZERO)) {
percentage += 1;
}
response.setPercentUsed(Integer.toString(percentage));
}
return response;
}
Aggregations