mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
Add cache mode param properly (#3925)
This commit is contained in:
parent
2d63ed5c24
commit
d549f3bdc8
@ -781,6 +781,7 @@ public class ApiConstants {
|
|||||||
public static final String ROUTER_CHECK_TYPE = "checktype";
|
public static final String ROUTER_CHECK_TYPE = "checktype";
|
||||||
public static final String LAST_UPDATED = "lastupdated";
|
public static final String LAST_UPDATED = "lastupdated";
|
||||||
public static final String PERFORM_FRESH_CHECKS = "performfreshchecks";
|
public static final String PERFORM_FRESH_CHECKS = "performfreshchecks";
|
||||||
|
public static final String CACHE_MODE = "cachemode";
|
||||||
|
|
||||||
public static final String CONSOLE_END_POINT = "consoleendpoint";
|
public static final String CONSOLE_END_POINT = "consoleendpoint";
|
||||||
public static final String EXTERNAL_LOAD_BALANCER_IP_ADDRESS = "externalloadbalanceripaddress";
|
public static final String EXTERNAL_LOAD_BALANCER_IP_ADDRESS = "externalloadbalanceripaddress";
|
||||||
|
|||||||
@ -144,6 +144,13 @@ public class CreateDiskOfferingCmd extends BaseCmd {
|
|||||||
description = "Hypervisor snapshot reserve space as a percent of a volume (for managed storage using Xen or VMware)")
|
description = "Hypervisor snapshot reserve space as a percent of a volume (for managed storage using Xen or VMware)")
|
||||||
private Integer hypervisorSnapshotReserve;
|
private Integer hypervisorSnapshotReserve;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.CACHE_MODE,
|
||||||
|
type = CommandType.STRING,
|
||||||
|
required = false,
|
||||||
|
description = "the cache mode to use for this disk offering. none, writeback or writethrough",
|
||||||
|
since = "4.14")
|
||||||
|
private String cacheMode;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
/////////////////// Accessors ///////////////////////
|
/////////////////// Accessors ///////////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
@ -262,6 +269,10 @@ public class CreateDiskOfferingCmd extends BaseCmd {
|
|||||||
return hypervisorSnapshotReserve;
|
return hypervisorSnapshotReserve;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCacheMode() {
|
||||||
|
return cacheMode;
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
/////////////// API Implementation///////////////////
|
/////////////// API Implementation///////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|||||||
@ -178,6 +178,13 @@ public class CreateServiceOfferingCmd extends BaseCmd {
|
|||||||
since = "4.4")
|
since = "4.4")
|
||||||
private Integer hypervisorSnapshotReserve;
|
private Integer hypervisorSnapshotReserve;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.CACHE_MODE,
|
||||||
|
type = CommandType.STRING,
|
||||||
|
required = false,
|
||||||
|
description = "the cache mode to use for this disk offering. none, writeback or writethrough",
|
||||||
|
since = "4.14")
|
||||||
|
private String cacheMode;
|
||||||
|
|
||||||
// Introduce 4 new optional paramaters to work custom compute offerings
|
// Introduce 4 new optional paramaters to work custom compute offerings
|
||||||
@Parameter(name = ApiConstants.CUSTOMIZED,
|
@Parameter(name = ApiConstants.CUSTOMIZED,
|
||||||
type = CommandType.BOOLEAN,
|
type = CommandType.BOOLEAN,
|
||||||
@ -377,6 +384,10 @@ public class CreateServiceOfferingCmd extends BaseCmd {
|
|||||||
return hypervisorSnapshotReserve;
|
return hypervisorSnapshotReserve;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCacheMode() {
|
||||||
|
return cacheMode;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If customized parameter is true, then cpuNumber, memory and cpuSpeed must be null
|
* If customized parameter is true, then cpuNumber, memory and cpuSpeed must be null
|
||||||
* Check if the optional params min/max CPU/Memory have been specified
|
* Check if the optional params min/max CPU/Memory have been specified
|
||||||
|
|||||||
@ -192,6 +192,10 @@ public class ServiceOfferingResponse extends BaseResponse {
|
|||||||
@Param(description = "is true if the offering is customized", since = "4.3.0")
|
@Param(description = "is true if the offering is customized", since = "4.3.0")
|
||||||
private Boolean isCustomized;
|
private Boolean isCustomized;
|
||||||
|
|
||||||
|
@SerializedName("cacheMode")
|
||||||
|
@Param(description = "the cache mode to use for this disk offering. none, writeback or writethrough", since = "4.14")
|
||||||
|
private String cacheMode;
|
||||||
|
|
||||||
public ServiceOfferingResponse() {
|
public ServiceOfferingResponse() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,4 +452,7 @@ public class ServiceOfferingResponse extends BaseResponse {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setCacheMode(String cacheMode) {
|
||||||
|
this.cacheMode = cacheMode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1171,7 +1171,7 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
final Long bytesReadRate, final Long bytesReadRateMax, final Long bytesReadRateMaxLength,
|
final Long bytesReadRate, final Long bytesReadRateMax, final Long bytesReadRateMaxLength,
|
||||||
final Long bytesWriteRate, final Long bytesWriteRateMax, final Long bytesWriteRateMaxLength,
|
final Long bytesWriteRate, final Long bytesWriteRateMax, final Long bytesWriteRateMaxLength,
|
||||||
final Long iopsReadRate, final Long iopsReadRateMax, final Long iopsReadRateMaxLength,
|
final Long iopsReadRate, final Long iopsReadRateMax, final Long iopsReadRateMaxLength,
|
||||||
final Long iopsWriteRate, final Long iopsWriteRateMax, final Long iopsWriteRateMaxLength) throws LibvirtException, InternalErrorException {
|
final Long iopsWriteRate, final Long iopsWriteRateMax, final Long iopsWriteRateMaxLength, final String cacheMode) throws LibvirtException, InternalErrorException {
|
||||||
List<DiskDef> disks = null;
|
List<DiskDef> disks = null;
|
||||||
Domain dm = null;
|
Domain dm = null;
|
||||||
DiskDef diskdef = null;
|
DiskDef diskdef = null;
|
||||||
@ -1281,6 +1281,9 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
if ((iopsWriteRateMaxLength != null) && (iopsWriteRateMaxLength > 0)) {
|
if ((iopsWriteRateMaxLength != null) && (iopsWriteRateMaxLength > 0)) {
|
||||||
diskdef.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
diskdef.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
||||||
}
|
}
|
||||||
|
if(cacheMode != null) {
|
||||||
|
diskdef.setCacheMode(DiskDef.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final String xml = diskdef.toString();
|
final String xml = diskdef.toString();
|
||||||
@ -1305,12 +1308,13 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
storagePoolMgr.connectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath(), disk.getDetails());
|
storagePoolMgr.connectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath(), disk.getDetails());
|
||||||
|
|
||||||
final KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
final KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
||||||
|
final String volCacheMode = vol.getCacheMode() == null ? null : vol.getCacheMode().toString();
|
||||||
|
|
||||||
attachOrDetachDisk(conn, true, vmName, phyDisk, disk.getDiskSeq().intValue(), serial,
|
attachOrDetachDisk(conn, true, vmName, phyDisk, disk.getDiskSeq().intValue(), serial,
|
||||||
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
||||||
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
||||||
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
||||||
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength());
|
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength(), volCacheMode);
|
||||||
|
|
||||||
return new AttachAnswer(disk);
|
return new AttachAnswer(disk);
|
||||||
} catch (final LibvirtException e) {
|
} catch (final LibvirtException e) {
|
||||||
@ -1334,12 +1338,13 @@ public class KVMStorageProcessor implements StorageProcessor {
|
|||||||
final Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
|
final Connect conn = LibvirtConnection.getConnectionByVmName(vmName);
|
||||||
|
|
||||||
final KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
final KVMPhysicalDisk phyDisk = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
||||||
|
final String volCacheMode = vol.getCacheMode() == null ? null : vol.getCacheMode().toString();
|
||||||
|
|
||||||
attachOrDetachDisk(conn, false, vmName, phyDisk, disk.getDiskSeq().intValue(), serial,
|
attachOrDetachDisk(conn, false, vmName, phyDisk, disk.getDiskSeq().intValue(), serial,
|
||||||
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
vol.getBytesReadRate(), vol.getBytesReadRateMax(), vol.getBytesReadRateMaxLength(),
|
||||||
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
vol.getBytesWriteRate(), vol.getBytesWriteRateMax(), vol.getBytesWriteRateMaxLength(),
|
||||||
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
vol.getIopsReadRate(), vol.getIopsReadRateMax(), vol.getIopsReadRateMaxLength(),
|
||||||
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength());
|
vol.getIopsWriteRate(), vol.getIopsWriteRateMax(), vol.getIopsWriteRateMaxLength(), volCacheMode);
|
||||||
|
|
||||||
storagePoolMgr.disconnectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
storagePoolMgr.disconnectPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), vol.getPath());
|
||||||
|
|
||||||
|
|||||||
@ -102,6 +102,7 @@ public class ServiceOfferingJoinDaoImpl extends GenericDaoBase<ServiceOfferingJo
|
|||||||
offeringResponse.setDetails(ApiDBUtils.getResourceDetails(offering.getId(), ResourceObjectType.ServiceOffering));
|
offeringResponse.setDetails(ApiDBUtils.getResourceDetails(offering.getId(), ResourceObjectType.ServiceOffering));
|
||||||
offeringResponse.setObjectName("serviceoffering");
|
offeringResponse.setObjectName("serviceoffering");
|
||||||
offeringResponse.setIscutomized(offering.isDynamic());
|
offeringResponse.setIscutomized(offering.isDynamic());
|
||||||
|
offeringResponse.setCacheMode(offering.getCacheMode());
|
||||||
|
|
||||||
return offeringResponse;
|
return offeringResponse;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -172,6 +172,9 @@ public class ServiceOfferingJoinVO extends BaseViewVO implements InternalIdentit
|
|||||||
@Column(name = "deployment_planner")
|
@Column(name = "deployment_planner")
|
||||||
private String deploymentPlanner;
|
private String deploymentPlanner;
|
||||||
|
|
||||||
|
@Column(name = "cache_mode")
|
||||||
|
String cacheMode;
|
||||||
|
|
||||||
public ServiceOfferingJoinVO() {
|
public ServiceOfferingJoinVO() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -349,4 +352,8 @@ public class ServiceOfferingJoinVO extends BaseViewVO implements InternalIdentit
|
|||||||
public boolean isDynamic() {
|
public boolean isDynamic() {
|
||||||
return cpu == null || speed == null || ramSize == null;
|
return cpu == null || speed == null || ramSize == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCacheMode() {
|
||||||
|
return cacheMode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -245,6 +245,7 @@ import com.cloud.vm.dao.NicIpAliasDao;
|
|||||||
import com.cloud.vm.dao.NicIpAliasVO;
|
import com.cloud.vm.dao.NicIpAliasVO;
|
||||||
import com.cloud.vm.dao.NicSecondaryIpDao;
|
import com.cloud.vm.dao.NicSecondaryIpDao;
|
||||||
import com.cloud.vm.dao.VMInstanceDao;
|
import com.cloud.vm.dao.VMInstanceDao;
|
||||||
|
import com.google.common.base.Enums;
|
||||||
import com.google.common.base.MoreObjects;
|
import com.google.common.base.MoreObjects;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
@ -2353,6 +2354,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if cache_mode parameter is valid
|
||||||
|
validateCacheMode(cmd.getCacheMode());
|
||||||
|
|
||||||
final Boolean offerHA = cmd.isOfferHa();
|
final Boolean offerHA = cmd.isOfferHa();
|
||||||
|
|
||||||
boolean localStorageRequired = false;
|
boolean localStorageRequired = false;
|
||||||
@ -2433,7 +2437,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
cmd.getBytesWriteRate(), cmd.getBytesWriteRateMax(), cmd.getBytesWriteRateMaxLength(),
|
cmd.getBytesWriteRate(), cmd.getBytesWriteRateMax(), cmd.getBytesWriteRateMaxLength(),
|
||||||
cmd.getIopsReadRate(), cmd.getIopsReadRateMax(), cmd.getIopsReadRateMaxLength(),
|
cmd.getIopsReadRate(), cmd.getIopsReadRateMax(), cmd.getIopsReadRateMaxLength(),
|
||||||
cmd.getIopsWriteRate(), cmd.getIopsWriteRateMax(), cmd.getIopsWriteRateMaxLength(),
|
cmd.getIopsWriteRate(), cmd.getIopsWriteRateMax(), cmd.getIopsWriteRateMaxLength(),
|
||||||
cmd.getHypervisorSnapshotReserve());
|
cmd.getHypervisorSnapshotReserve(), cmd.getCacheMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ServiceOfferingVO createServiceOffering(final long userId, final boolean isSystem, final VirtualMachine.Type vmType,
|
protected ServiceOfferingVO createServiceOffering(final long userId, final boolean isSystem, final VirtualMachine.Type vmType,
|
||||||
@ -2444,7 +2448,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength,
|
Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength,
|
||||||
Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength,
|
Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength,
|
||||||
Long iopsWriteRate, Long iopsWriteRateMax, Long iopsWriteRateMaxLength,
|
Long iopsWriteRate, Long iopsWriteRateMax, Long iopsWriteRateMaxLength,
|
||||||
final Integer hypervisorSnapshotReserve) {
|
final Integer hypervisorSnapshotReserve, String cacheMode) {
|
||||||
// Filter child domains when both parent and child domains are present
|
// Filter child domains when both parent and child domains are present
|
||||||
List<Long> filteredDomainIds = filterChildSubDomains(domainIds);
|
List<Long> filteredDomainIds = filterChildSubDomains(domainIds);
|
||||||
|
|
||||||
@ -2541,6 +2545,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 0) {
|
if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 0) {
|
||||||
offering.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
offering.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
||||||
}
|
}
|
||||||
|
if(cacheMode != null) {
|
||||||
|
offering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
||||||
|
}
|
||||||
|
|
||||||
if (hypervisorSnapshotReserve != null && hypervisorSnapshotReserve < 0) {
|
if (hypervisorSnapshotReserve != null && hypervisorSnapshotReserve < 0) {
|
||||||
throw new InvalidParameterValueException("If provided, Hypervisor Snapshot Reserve must be greater than or equal to 0.");
|
throw new InvalidParameterValueException("If provided, Hypervisor Snapshot Reserve must be greater than or equal to 0.");
|
||||||
@ -2799,7 +2806,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength,
|
Long bytesWriteRate, Long bytesWriteRateMax, Long bytesWriteRateMaxLength,
|
||||||
Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength,
|
Long iopsReadRate, Long iopsReadRateMax, Long iopsReadRateMaxLength,
|
||||||
Long iopsWriteRate, Long iopsWriteRateMax, Long iopsWriteRateMaxLength,
|
Long iopsWriteRate, Long iopsWriteRateMax, Long iopsWriteRateMaxLength,
|
||||||
final Integer hypervisorSnapshotReserve) {
|
final Integer hypervisorSnapshotReserve, String cacheMode) {
|
||||||
long diskSize = 0;// special case for custom disk offerings
|
long diskSize = 0;// special case for custom disk offerings
|
||||||
if (numGibibytes != null && numGibibytes <= 0) {
|
if (numGibibytes != null && numGibibytes <= 0) {
|
||||||
throw new InvalidParameterValueException("Please specify a disk size of at least 1 Gb.");
|
throw new InvalidParameterValueException("Please specify a disk size of at least 1 Gb.");
|
||||||
@ -2905,6 +2912,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 0) {
|
if (iopsWriteRateMaxLength != null && iopsWriteRateMaxLength > 0) {
|
||||||
newDiskOffering.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
newDiskOffering.setIopsWriteRateMaxLength(iopsWriteRateMaxLength);
|
||||||
}
|
}
|
||||||
|
if (cacheMode != null) {
|
||||||
|
newDiskOffering.setCacheMode(DiskOffering.DiskCacheMode.valueOf(cacheMode.toUpperCase()));
|
||||||
|
}
|
||||||
|
|
||||||
if (hypervisorSnapshotReserve != null && hypervisorSnapshotReserve < 0) {
|
if (hypervisorSnapshotReserve != null && hypervisorSnapshotReserve < 0) {
|
||||||
throw new InvalidParameterValueException("If provided, Hypervisor Snapshot Reserve must be greater than or equal to 0.");
|
throw new InvalidParameterValueException("If provided, Hypervisor Snapshot Reserve must be greater than or equal to 0.");
|
||||||
@ -2971,6 +2981,9 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
throw new InvalidParameterValueException("Disksize is not allowed for a customized disk offering");
|
throw new InvalidParameterValueException("Disksize is not allowed for a customized disk offering");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if cache_mode parameter is valid
|
||||||
|
validateCacheMode(cmd.getCacheMode());
|
||||||
|
|
||||||
boolean localStorageRequired = false;
|
boolean localStorageRequired = false;
|
||||||
final String storageType = cmd.getStorageType();
|
final String storageType = cmd.getStorageType();
|
||||||
if (storageType != null) {
|
if (storageType != null) {
|
||||||
@ -2997,13 +3010,14 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
final Long iopsWriteRateMax = cmd.getIopsWriteRateMax();
|
final Long iopsWriteRateMax = cmd.getIopsWriteRateMax();
|
||||||
final Long iopsWriteRateMaxLength = cmd.getIopsWriteRateMaxLength();
|
final Long iopsWriteRateMaxLength = cmd.getIopsWriteRateMaxLength();
|
||||||
final Integer hypervisorSnapshotReserve = cmd.getHypervisorSnapshotReserve();
|
final Integer hypervisorSnapshotReserve = cmd.getHypervisorSnapshotReserve();
|
||||||
|
final String cacheMode = cmd.getCacheMode();
|
||||||
|
|
||||||
final Long userId = CallContext.current().getCallingUserId();
|
final Long userId = CallContext.current().getCallingUserId();
|
||||||
return createDiskOffering(userId, domainIds, zoneIds, name, description, provisioningType, numGibibytes, tags, isCustomized,
|
return createDiskOffering(userId, domainIds, zoneIds, name, description, provisioningType, numGibibytes, tags, isCustomized,
|
||||||
localStorageRequired, isDisplayOfferingEnabled, isCustomizedIops, minIops,
|
localStorageRequired, isDisplayOfferingEnabled, isCustomizedIops, minIops,
|
||||||
maxIops, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength,
|
maxIops, bytesReadRate, bytesReadRateMax, bytesReadRateMaxLength, bytesWriteRate, bytesWriteRateMax, bytesWriteRateMaxLength,
|
||||||
iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength,
|
iopsReadRate, iopsReadRateMax, iopsReadRateMaxLength, iopsWriteRate, iopsWriteRateMax, iopsWriteRateMaxLength,
|
||||||
hypervisorSnapshotReserve);
|
hypervisorSnapshotReserve, cacheMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -6267,6 +6281,15 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
|
|||||||
return filteredDomainIds;
|
return filteredDomainIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void validateCacheMode(String cacheMode){
|
||||||
|
if(cacheMode != null &&
|
||||||
|
!Enums.getIfPresent(DiskOffering.DiskCacheMode.class,
|
||||||
|
cacheMode.toUpperCase()).isPresent()) {
|
||||||
|
throw new InvalidParameterValueException(String.format("Invalid cache mode (%s). Please specify one of the following " +
|
||||||
|
"valid cache mode parameters: none, writeback or writethrough", cacheMode));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public List<SecurityChecker> getSecChecker() {
|
public List<SecurityChecker> getSecChecker() {
|
||||||
return _secChecker;
|
return _secChecker;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -223,6 +223,78 @@ class TestCreateDiskOffering(cloudstackTestCase):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@attr(tags=["advanced", "basic", "eip", "sg", "advancedns", "smoke"], required_hardware="false")
|
||||||
|
def test_06_create_disk_offering_with_cache_mode_type(self):
|
||||||
|
"""Test to create disk offering with each one of the valid cache mode types : none, writeback and writethrough
|
||||||
|
|
||||||
|
# Validate the following:
|
||||||
|
# 1. createDiskOfferings should return valid info for new offering
|
||||||
|
# 2. The Cloud Database contains the valid information
|
||||||
|
"""
|
||||||
|
cache_mode_types=["none", "writeback", "writethrough"]
|
||||||
|
for i in range(3):
|
||||||
|
disk_offering = DiskOffering.create(
|
||||||
|
self.apiclient,
|
||||||
|
self.services["disk_offering"],
|
||||||
|
cacheMode=cache_mode_types[i]
|
||||||
|
)
|
||||||
|
self.cleanup.append(disk_offering)
|
||||||
|
|
||||||
|
self.debug("Created Disk offering with valid cacheMode param with ID: %s" % disk_offering.id)
|
||||||
|
|
||||||
|
list_disk_response = list_disk_offering(
|
||||||
|
self.apiclient,
|
||||||
|
id=disk_offering.id
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
isinstance(list_disk_response, list),
|
||||||
|
True,
|
||||||
|
"Check list response returns a valid list"
|
||||||
|
)
|
||||||
|
self.assertNotEqual(
|
||||||
|
len(list_disk_response),
|
||||||
|
0,
|
||||||
|
"Check Disk offering is created"
|
||||||
|
)
|
||||||
|
disk_response = list_disk_response[0]
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
disk_response.displaytext,
|
||||||
|
self.services["disk_offering"]["displaytext"],
|
||||||
|
"Check server id in createServiceOffering"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
disk_response.name,
|
||||||
|
self.services["disk_offering"]["name"],
|
||||||
|
"Check name in createServiceOffering"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
disk_response.cacheMode,
|
||||||
|
cache_mode_types[i],
|
||||||
|
"Check cacheMode in createServiceOffering"
|
||||||
|
)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
@attr(tags=["advanced", "basic", "eip", "sg", "advancedns", "smoke"], required_hardware="false")
|
||||||
|
def test_07_create_disk_offering_with_invalid_cache_mode_type(self):
|
||||||
|
"""Test to create disk offering with invalid cacheMode type
|
||||||
|
|
||||||
|
# Validate the following:
|
||||||
|
# 1. createDiskOfferings should return valid info for new offering
|
||||||
|
# 2. The Cloud Database contains the valid information
|
||||||
|
"""
|
||||||
|
|
||||||
|
with self.assertRaises(Exception):
|
||||||
|
disk_offering = DiskOffering.create(
|
||||||
|
self.apiclient,
|
||||||
|
self.services["disk_offering"],
|
||||||
|
cacheMode="invalid_cache_mode_type"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
class TestDiskOfferings(cloudstackTestCase):
|
class TestDiskOfferings(cloudstackTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
|||||||
@ -129,6 +129,7 @@ class TestCreateServiceOffering(cloudstackTestCase):
|
|||||||
"Check name in createServiceOffering"
|
"Check name in createServiceOffering"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
@attr(
|
@attr(
|
||||||
tags=[
|
tags=[
|
||||||
"advanced",
|
"advanced",
|
||||||
@ -197,6 +198,109 @@ class TestCreateServiceOffering(cloudstackTestCase):
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@attr(
|
||||||
|
tags=[
|
||||||
|
"advanced",
|
||||||
|
"advancedns",
|
||||||
|
"smoke",
|
||||||
|
"basic",
|
||||||
|
"eip",
|
||||||
|
"sg"],
|
||||||
|
required_hardware="false")
|
||||||
|
def test_03_create_service_offering_with_cache_mode_type(self):
|
||||||
|
"""Test to create service offering with each one of the valid cache mode types : none, writeback and writethrough"""
|
||||||
|
|
||||||
|
# Validate the following:
|
||||||
|
# 1. createServiceOfferings should return a valid information
|
||||||
|
# for newly created offering
|
||||||
|
# 2. The Cloud Database contains the valid information
|
||||||
|
|
||||||
|
cache_mode_types=["none", "writeback", "writethrough"]
|
||||||
|
for i in range(3):
|
||||||
|
service_offering = ServiceOffering.create(
|
||||||
|
self.apiclient,
|
||||||
|
self.services["service_offerings"]["tiny"],
|
||||||
|
cacheMode=cache_mode_types[i]
|
||||||
|
)
|
||||||
|
self.cleanup.append(service_offering)
|
||||||
|
|
||||||
|
self.debug(
|
||||||
|
"Created service offering with ID: %s" %
|
||||||
|
service_offering.id)
|
||||||
|
|
||||||
|
list_service_response = list_service_offering(
|
||||||
|
self.apiclient,
|
||||||
|
id=service_offering.id
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
isinstance(list_service_response, list),
|
||||||
|
True,
|
||||||
|
"Check list response returns a valid list"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertNotEqual(
|
||||||
|
len(list_service_response),
|
||||||
|
0,
|
||||||
|
"Check Service offering is created"
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
list_service_response[0].cpunumber,
|
||||||
|
self.services["service_offerings"]["tiny"]["cpunumber"],
|
||||||
|
"Check server id in createServiceOffering"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
list_service_response[0].cpuspeed,
|
||||||
|
self.services["service_offerings"]["tiny"]["cpuspeed"],
|
||||||
|
"Check cpuspeed in createServiceOffering"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
list_service_response[0].displaytext,
|
||||||
|
self.services["service_offerings"]["tiny"]["displaytext"],
|
||||||
|
"Check server displaytext in createServiceOfferings"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
list_service_response[0].memory,
|
||||||
|
self.services["service_offerings"]["tiny"]["memory"],
|
||||||
|
"Check memory in createServiceOffering"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
list_service_response[0].name,
|
||||||
|
self.services["service_offerings"]["tiny"]["name"],
|
||||||
|
"Check name in createServiceOffering"
|
||||||
|
)
|
||||||
|
self.assertEqual(
|
||||||
|
list_service_response[0].cacheMode,
|
||||||
|
cache_mode_types[i],
|
||||||
|
"Check cacheMode in createServiceOffering"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
@attr(
|
||||||
|
tags=[
|
||||||
|
"advanced",
|
||||||
|
"advancedns",
|
||||||
|
"smoke",
|
||||||
|
"basic",
|
||||||
|
"eip",
|
||||||
|
"sg"],
|
||||||
|
required_hardware="false")
|
||||||
|
def test_04_create_service_offering_with_invalid_cache_mode_type(self):
|
||||||
|
"""Test to create service offering with invalid cache mode type"""
|
||||||
|
|
||||||
|
# Validate the following:
|
||||||
|
# 1. createServiceOfferings should return a valid information
|
||||||
|
# for newly created offering
|
||||||
|
# 2. The Cloud Database contains the valid information
|
||||||
|
|
||||||
|
with self.assertRaises(Exception):
|
||||||
|
service_offering = ServiceOffering.create(
|
||||||
|
self.apiclient,
|
||||||
|
self.services["service_offerings"]["tiny"],
|
||||||
|
cacheMode="invalid_cache_mode_type"
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
class TestServiceOfferings(cloudstackTestCase):
|
class TestServiceOfferings(cloudstackTestCase):
|
||||||
|
|
||||||
|
|||||||
@ -2167,7 +2167,7 @@ class ServiceOffering:
|
|||||||
self.__dict__.update(items)
|
self.__dict__.update(items)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, services, tags=None, domainid=None, **kwargs):
|
def create(cls, apiclient, services, tags=None, domainid=None, cacheMode=None, **kwargs):
|
||||||
"""Create Service offering"""
|
"""Create Service offering"""
|
||||||
cmd = createServiceOffering.createServiceOfferingCmd()
|
cmd = createServiceOffering.createServiceOfferingCmd()
|
||||||
cmd.cpunumber = services["cpunumber"]
|
cmd.cpunumber = services["cpunumber"]
|
||||||
@ -2220,6 +2220,9 @@ class ServiceOffering:
|
|||||||
if domainid:
|
if domainid:
|
||||||
cmd.domainid = domainid
|
cmd.domainid = domainid
|
||||||
|
|
||||||
|
if cacheMode:
|
||||||
|
cmd.cacheMode = cacheMode
|
||||||
|
|
||||||
if tags:
|
if tags:
|
||||||
cmd.tags = tags
|
cmd.tags = tags
|
||||||
elif "tags" in services:
|
elif "tags" in services:
|
||||||
@ -2253,7 +2256,7 @@ class DiskOffering:
|
|||||||
self.__dict__.update(items)
|
self.__dict__.update(items)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(cls, apiclient, services, tags=None, custom=False, domainid=None, **kwargs):
|
def create(cls, apiclient, services, tags=None, custom=False, domainid=None, cacheMode=None, **kwargs):
|
||||||
"""Create Disk offering"""
|
"""Create Disk offering"""
|
||||||
cmd = createDiskOffering.createDiskOfferingCmd()
|
cmd = createDiskOffering.createDiskOfferingCmd()
|
||||||
cmd.displaytext = services["displaytext"]
|
cmd.displaytext = services["displaytext"]
|
||||||
@ -2266,6 +2269,9 @@ class DiskOffering:
|
|||||||
if domainid:
|
if domainid:
|
||||||
cmd.domainid = domainid
|
cmd.domainid = domainid
|
||||||
|
|
||||||
|
if cacheMode:
|
||||||
|
cmd.cacheMode = cacheMode
|
||||||
|
|
||||||
if tags:
|
if tags:
|
||||||
cmd.tags = tags
|
cmd.tags = tags
|
||||||
elif "tags" in services:
|
elif "tags" in services:
|
||||||
|
|||||||
@ -137,6 +137,28 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
cacheMode: {
|
||||||
|
label: 'label.cache.mode',
|
||||||
|
docID: 'helpDiskOfferingCacheMode',
|
||||||
|
select: function (args) {
|
||||||
|
var items = [];
|
||||||
|
items.push({
|
||||||
|
id: 'none',
|
||||||
|
description: 'No disk cache'
|
||||||
|
});
|
||||||
|
items.push({
|
||||||
|
id: 'writeback',
|
||||||
|
description: 'Write-back disk caching'
|
||||||
|
});
|
||||||
|
items.push({
|
||||||
|
id: "writethrough",
|
||||||
|
description: 'Write-through'
|
||||||
|
});
|
||||||
|
args.response.success({
|
||||||
|
data: items
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
offeringType: {
|
offeringType: {
|
||||||
label: 'label.compute.offering.type',
|
label: 'label.compute.offering.type',
|
||||||
docID: 'helpComputeOfferingType',
|
docID: 'helpComputeOfferingType',
|
||||||
@ -731,7 +753,8 @@
|
|||||||
displaytext: args.data.description,
|
displaytext: args.data.description,
|
||||||
storageType: args.data.storageType,
|
storageType: args.data.storageType,
|
||||||
provisioningType :args.data.provisioningType,
|
provisioningType :args.data.provisioningType,
|
||||||
customized: !isFixedOfferingType
|
customized: !isFixedOfferingType,
|
||||||
|
cacheMode: args.data.cacheMode
|
||||||
};
|
};
|
||||||
|
|
||||||
//custom fields (begin)
|
//custom fields (begin)
|
||||||
@ -1221,6 +1244,9 @@
|
|||||||
provisioningtype: {
|
provisioningtype: {
|
||||||
label: 'label.disk.provisioningtype'
|
label: 'label.disk.provisioningtype'
|
||||||
},
|
},
|
||||||
|
cacheMode: {
|
||||||
|
label: 'label.cache.mode'
|
||||||
|
},
|
||||||
cpunumber: {
|
cpunumber: {
|
||||||
label: 'label.num.cpu.cores'
|
label: 'label.num.cpu.cores'
|
||||||
},
|
},
|
||||||
@ -1481,6 +1507,28 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
cacheMode: {
|
||||||
|
label: 'label.cache.mode',
|
||||||
|
docID: 'helpDiskOfferingCacheMode',
|
||||||
|
select: function(args) {
|
||||||
|
var items = [];
|
||||||
|
items.push({
|
||||||
|
id: 'none',
|
||||||
|
description: 'No disk cache'
|
||||||
|
});
|
||||||
|
items.push({
|
||||||
|
id: 'writeback',
|
||||||
|
description: 'Write-back disk caching'
|
||||||
|
});
|
||||||
|
items.push({
|
||||||
|
id: 'writethrough',
|
||||||
|
description: 'Write-through disk caching'
|
||||||
|
});
|
||||||
|
args.response.success({
|
||||||
|
data: items
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
cpuNumber: {
|
cpuNumber: {
|
||||||
label: 'label.num.cpu.cores',
|
label: 'label.num.cpu.cores',
|
||||||
docID: 'helpSystemOfferingCPUCores',
|
docID: 'helpSystemOfferingCPUCores',
|
||||||
@ -1694,7 +1742,8 @@
|
|||||||
provisioningType: args.data.provisioningType,
|
provisioningType: args.data.provisioningType,
|
||||||
cpuNumber: args.data.cpuNumber,
|
cpuNumber: args.data.cpuNumber,
|
||||||
cpuSpeed: args.data.cpuSpeed,
|
cpuSpeed: args.data.cpuSpeed,
|
||||||
memory: args.data.memory
|
memory: args.data.memory,
|
||||||
|
cacheMode: args.data.cacheMode
|
||||||
};
|
};
|
||||||
|
|
||||||
if (args.data.networkRate != null && args.data.networkRate.length > 0) {
|
if (args.data.networkRate != null && args.data.networkRate.length > 0) {
|
||||||
@ -1920,6 +1969,9 @@
|
|||||||
provisioningtype: {
|
provisioningtype: {
|
||||||
label: 'label.disk.provisioningtype'
|
label: 'label.disk.provisioningtype'
|
||||||
},
|
},
|
||||||
|
cacheMode: {
|
||||||
|
label: 'label.cache.mode'
|
||||||
|
},
|
||||||
cpunumber: {
|
cpunumber: {
|
||||||
label: 'label.num.cpu.cores'
|
label: 'label.num.cpu.cores'
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user