Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions api/src/main/java/com/cloud/agent/api/to/VolumeTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ protected VolumeTO() {
private Long iopsReadRate;
private Long iopsWriteRate;
private String cacheMode;
private String errorPolicy;
private Long chainSize;

public VolumeTO(long id, Volume.Type type, StoragePoolType poolType, String poolUuid, String name, String mountPoint, String path, long size, String chainInfo) {
Expand Down Expand Up @@ -187,6 +188,14 @@ public String getCacheMode() {
return cacheMode;
}

public void setErrorPolicy(String errorPolicy) {
this.errorPolicy = errorPolicy;
}

public String getErrorPolicy() {
return errorPolicy;
}

public Long getChainSize() {
return chainSize;
}
Expand Down
19 changes: 19 additions & 0 deletions api/src/main/java/com/cloud/offering/DiskOffering.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,21 @@ public String toString() {
}
};

enum DiskErrorPolicy {
REPORT("report"), STOP("stop"), IGNORE("ignore"), ENOSPACE("enospace");

private final String _diskErrorPolicy;

DiskErrorPolicy(String errorPolicy) {
_diskErrorPolicy = errorPolicy;
}

@Override
public String toString() {
return _diskErrorPolicy;
}
};

String getUniqueName();

boolean isUseLocalStorage();
Expand Down Expand Up @@ -145,6 +160,10 @@ public String toString() {

void setCacheMode(DiskCacheMode cacheMode);

DiskErrorPolicy getErrorPolicy();

void setErrorPolicy(DiskErrorPolicy errorPolicy);

boolean isComputeOnly();

boolean getDiskSizeStrictness();
Expand Down
9 changes: 9 additions & 0 deletions api/src/main/java/com/cloud/vm/DiskProfile.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class DiskProfile {
private Long iopsReadRate;
private Long iopsWriteRate;
private String cacheMode;
private String errorPolicy;
private Long minIops;
private Long maxIops;
private boolean requiresEncryption;
Expand Down Expand Up @@ -238,6 +239,14 @@ public String getCacheMode() {
return cacheMode;
}

public void setErrorPolicy(String errorPolicy) {
this.errorPolicy = errorPolicy;
}

public String getErrorPolicy() {
return errorPolicy;
}

public Long getMinIops() {
return minIops;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1293,6 +1293,7 @@ public class ApiConstants {
public static final String LAST_UPDATED = "lastupdated";
public static final String PERFORM_FRESH_CHECKS = "performfreshchecks";
public static final String CACHE_MODE = "cachemode";
public static final String ERROR_POLICY = "errorpolicy";

public static final String CONSOLE_END_POINT = "consoleendpoint";
public static final String EXTERNAL_LOAD_BALANCER_IP_ADDRESS = "externalloadbalanceripaddress";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,12 @@ public class CreateDiskOfferingCmd extends BaseCmd {
since = "4.14")
private String cacheMode;

@Parameter(name = ApiConstants.ERROR_POLICY,
type = CommandType.STRING,
description = "The disk error policy to use for this disk offering. report, stop, ignore or enospace. Only applicable to KVM",
since = "24.0.0")
private String errorPolicy;

@Parameter(name = ApiConstants.STORAGE_POLICY, type = CommandType.UUID, entityType = VsphereStoragePoliciesResponse.class,required = false, description = "Name of the storage policy defined at vCenter, this is applicable only for VMware", since = "4.15")
private Long storagePolicy;

Expand Down Expand Up @@ -297,6 +303,10 @@ public String getCacheMode() {
return cacheMode;
}

public String getErrorPolicy() {
return errorPolicy;
}

public Map<String, String> getDetails() {
Map<String, String> detailsMap = new HashMap<>();
if (MapUtils.isNotEmpty(details)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,12 @@ public class CreateServiceOfferingCmd extends BaseCmd {
since = "4.14")
private String cacheMode;

@Parameter(name = ApiConstants.ERROR_POLICY,
type = CommandType.STRING,
description = "The disk error policy to use for the root disk of this compute offering. report, stop, ignore or enospace. Only applicable to KVM",
since = "24.0.0")
private String errorPolicy;

// Introduce 4 new optional parameters to work custom compute offerings
@Parameter(name = ApiConstants.CUSTOMIZED,
type = CommandType.BOOLEAN,
Expand Down Expand Up @@ -475,6 +481,10 @@ public String getCacheMode() {
return cacheMode;
}

public String getErrorPolicy() {
return errorPolicy;
}

/**
* 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ public class UpdateDiskOfferingCmd extends BaseCmd implements DomainAndZoneIdRes
@Parameter(name = ApiConstants.CACHE_MODE, type = CommandType.STRING, description = "The cache mode to use for this disk offering", since = "4.15")
private String cacheMode;

@Parameter(name = ApiConstants.ERROR_POLICY, type = CommandType.STRING, description = "The disk error policy to use for this disk offering. Only applicable to KVM", since = "24.0.0")
private String errorPolicy;

@Parameter(name = ApiConstants.STATE, type = CommandType.STRING, description = "state of the disk offering")
private String diskOfferingState;

Expand Down Expand Up @@ -165,6 +168,10 @@ public String getCacheMode() {
return cacheMode;
}

public String getErrorPolicy() {
return errorPolicy;
}

public Long getBytesReadRate() {
return bytesReadRate;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,10 @@ public class DiskOfferingResponse extends BaseResponseWithAnnotations {
@Param(description = "The cache mode to use for this disk offering. none, writeback or writethrough", since = "4.4")
private String cacheMode;

@SerializedName("errorpolicy")
@Param(description = "The disk error policy to use for this disk offering. report, stop, ignore or enospace", since = "24.0.0")
private String errorPolicy;

@SerializedName("displayoffering")
@Param(description = "Whether to display the offering to the end user or not.")
private Boolean displayOffering;
Expand Down Expand Up @@ -322,6 +326,14 @@ public void setCacheMode(String cacheMode) {
this.cacheMode = cacheMode;
}

public String getErrorPolicy() {
return errorPolicy;
}

public void setErrorPolicy(String errorPolicy) {
this.errorPolicy = errorPolicy;
}

public String getStorageType() {
return storageType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,10 @@ public class ServiceOfferingResponse extends BaseResponseWithAnnotations {
@Param(description = "The cache mode to use for this disk offering. none, writeback, writethrough or hypervisor default", since = "4.14")
private String cacheMode;

@SerializedName("errorpolicy")
@Param(description = "The disk error policy to use for the root disk of this compute offering. report, stop, ignore or enospace", since = "24.0.0")
private String errorPolicy;

@SerializedName("vspherestoragepolicy")
@Param(description = "The vsphere storage policy tagged to the service offering in case of VMware", since = "4.15")
private String vsphereStoragePolicy;
Expand Down Expand Up @@ -553,6 +557,10 @@ public void setCacheMode(String cacheMode) {
this.cacheMode = cacheMode;
}

public void setErrorPolicy(String errorPolicy) {
this.errorPolicy = errorPolicy;
}

public Integer getLeaseDuration() {
return leaseDuration;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.cloud.agent.api.to.DataTO;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.offering.DiskOffering.DiskCacheMode;
import com.cloud.offering.DiskOffering.DiskErrorPolicy;
import com.cloud.storage.MigrationOptions;
import com.cloud.storage.Storage;
import com.cloud.storage.Volume;
Expand Down Expand Up @@ -68,6 +69,7 @@ public class VolumeObjectTO extends DownloadableObjectTO implements DataTO, Seri
private Long iopsWriteRateMax;
private Long iopsWriteRateMaxLength;
private DiskCacheMode cacheMode;
private DiskErrorPolicy errorPolicy;
private Hypervisor.HypervisorType hypervisorType;
private MigrationOptions migrationOptions;
private boolean directDownload;
Expand Down Expand Up @@ -119,6 +121,7 @@ public VolumeObjectTO(VolumeInfo volume) {
iopsWriteRateMaxLength = volume.getIopsWriteRateMaxLength();
hypervisorType = volume.getHypervisorType();
setCacheMode(volume.getCacheMode());
setErrorPolicy(volume.getErrorPolicy());
setDeviceId(volume.getDeviceId());
this.migrationOptions = volume.getMigrationOptions();
this.directDownload = volume.isDirectDownload();
Expand Down Expand Up @@ -355,6 +358,14 @@ public DiskCacheMode getCacheMode() {
return cacheMode;
}

public void setErrorPolicy(DiskErrorPolicy errorPolicy) {
this.errorPolicy = errorPolicy;
}

public DiskErrorPolicy getErrorPolicy() {
return errorPolicy;
}

public MigrationOptions getMigrationOptions() {
return migrationOptions;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.cloud.agent.api.Answer;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.offering.DiskOffering.DiskCacheMode;
import com.cloud.offering.DiskOffering.DiskErrorPolicy;
import com.cloud.storage.MigrationOptions;
import com.cloud.storage.Storage;
import com.cloud.storage.Volume;
Expand Down Expand Up @@ -79,6 +80,8 @@ public interface VolumeInfo extends DownloadableDataInfo, Volume {

DiskCacheMode getCacheMode();

DiskErrorPolicy getErrorPolicy();

/**
* Currently available for KVM volumes
*/
Expand Down
14 changes: 14 additions & 0 deletions engine/schema/src/main/java/com/cloud/storage/DiskOfferingVO.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ public class DiskOfferingVO implements DiskOffering {
@Enumerated(value = EnumType.STRING)
private DiskCacheMode cacheMode;

@Column(name = "error_policy", updatable = true, nullable = false)
@Enumerated(value = EnumType.STRING)
private DiskErrorPolicy errorPolicy;

@Column(name = "provisioning_type")
Storage.ProvisioningType provisioningType;

Expand Down Expand Up @@ -288,6 +292,16 @@ public void setCacheMode(DiskCacheMode cacheMode) {
this.cacheMode = cacheMode;
}

@Override
public DiskErrorPolicy getErrorPolicy() {
return errorPolicy;
}

@Override
public void setErrorPolicy(DiskErrorPolicy errorPolicy) {
this.errorPolicy = errorPolicy;
}

@Override
public String getUniqueName() {
return uniqueName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,3 +239,5 @@ CREATE TABLE IF NOT EXISTS `cloud`.`instance_boot_group_details` (
PRIMARY KEY (`id`),
CONSTRAINT `fk_instance_boot_group_details__group_id` FOREIGN KEY (`boot_group_id`) REFERENCES `instance_boot_group` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `cloud`.`disk_offering` ADD COLUMN `error_policy` VARCHAR(16) DEFAULT 'report' COMMENT 'disk error policy (report/stop/ignore/enospace) used by KVM hypervisor';
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ SELECT
`disk_offering`.`iops_write_rate_max` AS `iops_write_rate_max`,
`disk_offering`.`iops_write_rate_max_length` AS `iops_write_rate_max_length`,
`disk_offering`.`cache_mode` AS `cache_mode`,
`disk_offering`.`error_policy` AS `error_policy`,
`disk_offering`.`sort_key` AS `sort_key`,
`disk_offering`.`compute_only` AS `compute_only`,
`disk_offering`.`display_offering` AS `display_offering`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ SELECT
`disk_offering`.`iops_write_rate_max` AS `iops_write_rate_max`,
`disk_offering`.`iops_write_rate_max_length` AS `iops_write_rate_max_length`,
`disk_offering`.`cache_mode` AS `cache_mode`,
`disk_offering`.`error_policy` AS `error_policy`,
`disk_offering`.`disk_size` AS `root_disk_size`,
`disk_offering`.`encrypt` AS `encrypt_root`,
`service_offering`.`cpu` AS `cpu`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ SELECT
`disk_offering`.`iops_read_rate` AS `iops_read_rate`,
`disk_offering`.`iops_write_rate` AS `iops_write_rate`,
`disk_offering`.`cache_mode` AS `cache_mode`,
`disk_offering`.`error_policy` AS `error_policy`,
`storage_pool`.`id` AS `pool_id`,
`storage_pool`.`uuid` AS `pool_uuid`,
`storage_pool`.`name` AS `pool_name`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.offering.DiskOffering.DiskCacheMode;
import com.cloud.offering.DiskOffering.DiskErrorPolicy;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.Storage;
Expand Down Expand Up @@ -350,6 +351,12 @@ public DiskCacheMode getCacheMode() {
return diskOfferingVO == null ? null : diskOfferingVO.getCacheMode();
}

@Override
public DiskErrorPolicy getErrorPolicy() {
DiskOfferingVO diskOfferingVO = getDiskOfferingVO();
return diskOfferingVO == null ? null : diskOfferingVO.getErrorPolicy();
}

@Override
public MigrationOptions getMigrationOptions() {
return migrationOptions;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3929,6 +3929,10 @@ public int compare(final DiskTO arg0, final DiskTO arg1) {
disk.setCacheMode(DiskDef.DiskCacheMode.valueOf(volumeObjectTO.getCacheMode().toString().toUpperCase()));
}

if (volumeObjectTO.getErrorPolicy() != null) {
disk.setErrorPolicy(DiskDef.DiskErrorPolicy.valueOf(volumeObjectTO.getErrorPolicy().toString().toUpperCase()));
}

if (volumeObjectTO.requiresEncryption() &&
pool.getType().encryptionSupportMode() == Storage.EncryptionSupport.Hypervisor ) {
String secretUuid = createLibvirtVolumeSecret(conn, volumeObjectTO.getPath(), volumeObjectTO.getPassphrase());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ public boolean parseDomainXML(String domXML) {
if (type.equalsIgnoreCase("network")) {
String diskFmtType = getAttrValue("driver", "type", disk);
String diskCacheMode = getAttrValue("driver", "cache", disk);
String diskErrorPolicy = getAttrValue("driver", "error_policy", disk);
String diskPath = getAttrValue("source", "name", disk);
String protocol = getAttrValue("source", "protocol", disk);
String authUserName = getAttrValue("auth", "username", disk);
Expand All @@ -114,9 +115,13 @@ public boolean parseDomainXML(String domXML) {
if (StringUtils.isNotBlank(diskCacheMode)) {
def.setCacheMode(DiskDef.DiskCacheMode.valueOf(diskCacheMode.toUpperCase()));
}
if (StringUtils.isNotBlank(diskErrorPolicy)) {
def.setErrorPolicy(DiskDef.DiskErrorPolicy.valueOf(diskErrorPolicy.toUpperCase()));
}
} else {
String diskFmtType = getAttrValue("driver", "type", disk);
String diskCacheMode = getAttrValue("driver", "cache", disk);
String diskErrorPolicy = getAttrValue("driver", "error_policy", disk);
String diskFile = getAttrValue("source", "file", disk);
String diskDev = getAttrValue("source", "dev", disk);

Expand All @@ -141,6 +146,9 @@ public boolean parseDomainXML(String domXML) {
if (StringUtils.isNotBlank(diskCacheMode)) {
def.setCacheMode(DiskDef.DiskCacheMode.valueOf(diskCacheMode.toUpperCase()));
}
if (StringUtils.isNotBlank(diskErrorPolicy)) {
def.setErrorPolicy(DiskDef.DiskErrorPolicy.valueOf(diskErrorPolicy.toUpperCase()));
}
}

NodeList iotune = disk.getElementsByTagName("iotune");
Expand Down
Loading
Loading