/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl;
import org.apache.commons.lang.StringUtils;
import com.emc.storageos.db.client.model.StorageSystem;
import com.emc.storageos.plugins.common.Constants;
import com.emc.storageos.volumecontroller.impl.smis.SmisCommandHelper;
/**
* Auxiliary class to hold a storage group policy and host quota attributes
*/
public class StorageGroupPolicyLimitsParam extends HostIOLimitsParam {
public static final String NON_FAST_POLICY = "NonFast";
public static final String BANDWIDTH = "bw";
public static final String IOPS = "iops";
public static final String COMP = "Comp";
private String autoTierPolicyName;
private StorageSystem storage;
private boolean compression = false;
StorageGroupPolicyLimitsParam() {
}
public StorageGroupPolicyLimitsParam(VolumeURIHLU volumeURIHlu, StorageSystem storage) {
this(volumeURIHlu.getAutoTierPolicyName(), volumeURIHlu.getHostIOLimitBandwidth(), volumeURIHlu.getHostIOLimitIOPs(), storage);
}
public StorageGroupPolicyLimitsParam(VolumeURIHLU volumeURIHlu, StorageSystem storage, SmisCommandHelper helper) {
if (storage.checkIfVmax3()) {
setAutoTierPolicyName(helper.getVMAX3FastSettingForVolume(volumeURIHlu.getVolumeURI(), volumeURIHlu.getAutoTierPolicyName()));
setHostIOLimitBandwidth(volumeURIHlu.getHostIOLimitBandwidth());
setHostIOLimitIOPs(volumeURIHlu.getHostIOLimitIOPs());
setStorage(storage);
setCompression(helper.isVMAX3VolumeCompressionEnabled(volumeURIHlu.getVolumeURI()));
}
}
public StorageGroupPolicyLimitsParam(String policyName) {
this(policyName, (Integer) null, (Integer) null, null);
}
public StorageGroupPolicyLimitsParam(String autoTierPolicyName, Integer hostIOLimitBandwidth, Integer hostIOLimitIOPs,
StorageSystem storage) {
setAutoTierPolicyName(autoTierPolicyName);
setHostIOLimitBandwidth(hostIOLimitBandwidth);
setHostIOLimitIOPs(hostIOLimitIOPs);
setStorage(storage);
}
public StorageGroupPolicyLimitsParam(String autoTierPolicyName, Integer hostIOLimitBandwidth, Integer hostIOLimitIOPs,
boolean compression, StorageSystem storage) {
this(autoTierPolicyName, hostIOLimitBandwidth, hostIOLimitIOPs, storage);
setCompression(compression);
}
public StorageGroupPolicyLimitsParam(String autoTierPolicyName, String hostIOLimitBandwidth, String hostIOLimitIOPs,
StorageSystem storage) {
this(autoTierPolicyName, (Integer) null, (Integer) null, storage);
try {
setHostIOLimitBandwidth(StringUtils.isEmpty(hostIOLimitBandwidth) ? null : Integer.parseInt(hostIOLimitBandwidth));
setHostIOLimitIOPs(StringUtils.isEmpty(hostIOLimitIOPs) ? null : Integer.parseInt(hostIOLimitIOPs));
} catch (Exception e) {
// ignore number format exception
}
}
public String getAutoTierPolicyName() {
return autoTierPolicyName;
}
public void setAutoTierPolicyName(String autoTierPolicyName) {
this.autoTierPolicyName = autoTierPolicyName;
}
public StorageSystem getStorage() {
return storage;
}
public void setStorage(StorageSystem storage) {
this.storage = storage;
}
public void setCompression(final boolean compression) {
this.compression = compression;
}
public boolean getCompression() {
return compression;
}
/**
* Construct a storage group key string based on given FAST policy name, limit bandwidth, and limit IO
*
* @return
*/
public String toString() {
String policyName = StringUtils.equalsIgnoreCase(autoTierPolicyName, Constants.NONE) ? NON_FAST_POLICY : getAutoTierPolicyName();
if (isHostIOLimitBandwidthSet()) {
policyName += "_bw" + getHostIOLimitBandwidth();
}
if (isHostIOLimitIOPsSet()) {
policyName += "_iops" + getHostIOLimitIOPs();
}
if (getCompression()) {
policyName += "_" + COMP;
}
return policyName;
}
public String getString() {
if (storage != null && storage.checkIfVmax3()) {
autoTierPolicyName = autoTierPolicyName.replaceAll(Constants.SMIS_PLUS_REGEX, Constants.UNDERSCORE_DELIMITER);
}
String policyName = StringUtils.equalsIgnoreCase(autoTierPolicyName, Constants.NONE) ? NON_FAST_POLICY : getAutoTierPolicyName();
if (isHostIOLimitBandwidthSet()) {
policyName += "_" + BANDWIDTH + getHostIOLimitBandwidth();
}
if (isHostIOLimitIOPsSet()) {
policyName += "_" + IOPS + getHostIOLimitIOPs();
}
if (getCompression()) {
policyName += "_" + COMP;
}
return policyName;
}
@Override
public int hashCode() {
return toString().hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
return StringUtils.equalsIgnoreCase(toString(), obj.toString());
}
}