Add Hypervisor default as cache mode for disk offerings (#10282)

Co-authored-by: Henrique Sato <henrique.sato@scclouds.com.br>
This commit is contained in:
Henrique Sato 2025-10-08 08:39:28 -03:00 committed by GitHub
parent a15fbd9bcc
commit cc3170577c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 30 additions and 13 deletions

View File

@ -37,7 +37,7 @@ public interface DiskOffering extends InfrastructureEntity, Identity, InternalId
State getState(); State getState();
enum DiskCacheMode { enum DiskCacheMode {
NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"), HYPERVISOR_DEFAULT("hypervisor_default");
private final String _diskCacheMode; private final String _diskCacheMode;

View File

@ -151,7 +151,7 @@ public class CreateDiskOfferingCmd extends BaseCmd {
@Parameter(name = ApiConstants.CACHE_MODE, @Parameter(name = ApiConstants.CACHE_MODE,
type = CommandType.STRING, type = CommandType.STRING,
required = false, required = false,
description = "the cache mode to use for this disk offering. none, writeback or writethrough", description = "the cache mode to use for this disk offering. none, writeback, writethrough or hypervisor default. If the hypervisor default cache mode is used on other hypervisors than KVM, it will fall back to none cache mode",
since = "4.14") since = "4.14")
private String cacheMode; private String cacheMode;

View File

@ -190,7 +190,7 @@ public class CreateServiceOfferingCmd extends BaseCmd {
@Parameter(name = ApiConstants.CACHE_MODE, @Parameter(name = ApiConstants.CACHE_MODE,
type = CommandType.STRING, type = CommandType.STRING,
required = false, required = false,
description = "the cache mode to use for this disk offering. none, writeback or writethrough", description = "the cache mode to use for this disk offering. none, writeback, writethrough or hypervisor default. If the hypervisor default cache mode is used on other hypervisors than KVM, it will fall back to none cache mode",
since = "4.14") since = "4.14")
private String cacheMode; private String cacheMode;

View File

@ -197,7 +197,7 @@ public class ServiceOfferingResponse extends BaseResponseWithAnnotations {
private Boolean isCustomized; private Boolean isCustomized;
@SerializedName("cacheMode") @SerializedName("cacheMode")
@Param(description = "the cache mode to use for this disk offering. none, writeback or writethrough", since = "4.14") @Param(description = "the cache mode to use for this disk offering. none, writeback, writethrough or hypervisor default", since = "4.14")
private String cacheMode; private String cacheMode;
@SerializedName("vspherestoragepolicy") @SerializedName("vspherestoragepolicy")

View File

@ -116,8 +116,8 @@ public class VolumeObjectTO extends DownloadableObjectTO implements DataTO {
iopsWriteRate = volume.getIopsWriteRate(); iopsWriteRate = volume.getIopsWriteRate();
iopsWriteRateMax = volume.getIopsWriteRateMax(); iopsWriteRateMax = volume.getIopsWriteRateMax();
iopsWriteRateMaxLength = volume.getIopsWriteRateMaxLength(); iopsWriteRateMaxLength = volume.getIopsWriteRateMaxLength();
cacheMode = volume.getCacheMode();
hypervisorType = volume.getHypervisorType(); hypervisorType = volume.getHypervisorType();
setCacheMode(volume.getCacheMode());
setDeviceId(volume.getDeviceId()); setDeviceId(volume.getDeviceId());
this.migrationOptions = volume.getMigrationOptions(); this.migrationOptions = volume.getMigrationOptions();
this.directDownload = volume.isDirectDownload(); this.directDownload = volume.isDirectDownload();
@ -343,6 +343,10 @@ public class VolumeObjectTO extends DownloadableObjectTO implements DataTO {
} }
public void setCacheMode(DiskCacheMode cacheMode) { public void setCacheMode(DiskCacheMode cacheMode) {
if (DiskCacheMode.HYPERVISOR_DEFAULT.equals(cacheMode) && !Hypervisor.HypervisorType.KVM.equals(hypervisorType)) {
this.cacheMode = DiskCacheMode.NONE;
return;
}
this.cacheMode = cacheMode; this.cacheMode = cacheMode;
} }

View File

@ -26,6 +26,9 @@ CALL `cloud`.`IDEMPOTENT_CHANGE_COLUMN`('router_health_check', 'check_result', '
-- Increase length of scripts_version column to 128 due to md5sum to sha512sum change -- Increase length of scripts_version column to 128 due to md5sum to sha512sum change
CALL `cloud`.`IDEMPOTENT_CHANGE_COLUMN`('cloud.domain_router', 'scripts_version', 'scripts_version', 'VARCHAR(128)'); CALL `cloud`.`IDEMPOTENT_CHANGE_COLUMN`('cloud.domain_router', 'scripts_version', 'scripts_version', 'VARCHAR(128)');
-- Increase the cache_mode column size from cloud.disk_offering table
CALL `cloud`.`IDEMPOTENT_CHANGE_COLUMN`('cloud.disk_offering', 'cache_mode', 'cache_mode', 'varchar(18) DEFAULT "none" COMMENT "The disk cache mode to use for disks created with this offering"');
-- Add uuid column to ldap_configuration table -- Add uuid column to ldap_configuration table
CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.ldap_configuration', 'uuid', 'VARCHAR(40) NOT NULL'); CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.ldap_configuration', 'uuid', 'VARCHAR(40) NOT NULL');

View File

@ -707,7 +707,7 @@ public class LibvirtVMDef {
} }
public enum DiskCacheMode { public enum DiskCacheMode {
NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"), HYPERVISOR_DEFAULT("default");
String _diskCacheMode; String _diskCacheMode;
DiskCacheMode(String cacheMode) { DiskCacheMode(String cacheMode) {

View File

@ -34,7 +34,7 @@ public class ProviderAdapterDiskOffering {
this.type = ProvisioningType.getProvisioningType(hiddenDiskOffering.getProvisioningType().toString()); this.type = ProvisioningType.getProvisioningType(hiddenDiskOffering.getProvisioningType().toString());
} }
if (hiddenDiskOffering.getCacheMode() != null) { if (hiddenDiskOffering.getCacheMode() != null) {
this.diskCacheMode = DiskCacheMode.getDiskCasehMode(hiddenDiskOffering.getCacheMode().toString()); this.diskCacheMode = DiskCacheMode.getDiskCacheMode(hiddenDiskOffering.getCacheMode().toString());
} }
if (hiddenDiskOffering.getState() != null) { if (hiddenDiskOffering.getState() != null) {
this.state = State.valueOf(hiddenDiskOffering.getState().toString()); this.state = State.valueOf(hiddenDiskOffering.getState().toString());
@ -166,7 +166,7 @@ public class ProviderAdapterDiskOffering {
} }
enum DiskCacheMode { enum DiskCacheMode {
NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"), HYPERVISOR_DEFAULT("hypervisor_default");
private final String _diskCacheMode; private final String _diskCacheMode;
@ -179,13 +179,15 @@ public class ProviderAdapterDiskOffering {
return _diskCacheMode; return _diskCacheMode;
} }
public static DiskCacheMode getDiskCasehMode(String cacheMode) { public static DiskCacheMode getDiskCacheMode(String cacheMode) {
if (cacheMode.equals(NONE._diskCacheMode)) { if (cacheMode.equals(NONE._diskCacheMode)) {
return NONE; return NONE;
} else if (cacheMode.equals(WRITEBACK._diskCacheMode)) { } else if (cacheMode.equals(WRITEBACK._diskCacheMode)) {
return WRITEBACK; return WRITEBACK;
} else if (cacheMode.equals(WRITETHROUGH._diskCacheMode)) { } else if (cacheMode.equals(WRITETHROUGH._diskCacheMode)) {
return WRITETHROUGH; return WRITETHROUGH;
} else if (cacheMode.equals(HYPERVISOR_DEFAULT._diskCacheMode)) {
return HYPERVISOR_DEFAULT;
} else { } else {
throw new NotImplementedException("Invalid cache mode specified: " + cacheMode); throw new NotImplementedException("Invalid cache mode specified: " + cacheMode);
} }

View File

@ -8440,7 +8440,7 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
!Enums.getIfPresent(DiskOffering.DiskCacheMode.class, !Enums.getIfPresent(DiskOffering.DiskCacheMode.class,
cacheMode.toUpperCase()).isPresent()) { cacheMode.toUpperCase()).isPresent()) {
throw new InvalidParameterValueException(String.format("Invalid cache mode (%s). Please specify one of the following " + throw new InvalidParameterValueException(String.format("Invalid cache mode (%s). Please specify one of the following " +
"valid cache mode parameters: none, writeback or writethrough", cacheMode)); "valid cache mode parameters: none, writeback, writethrough or hypervisor_default.", cacheMode));
} }
} }

View File

@ -1211,6 +1211,7 @@
"label.hourly": "Hourly", "label.hourly": "Hourly",
"label.hypervisor": "Hypervisor", "label.hypervisor": "Hypervisor",
"label.hypervisor.capabilities": "Hypervisor Capabilities", "label.hypervisor.capabilities": "Hypervisor Capabilities",
"label.hypervisor.default": "Hypervisor default",
"label.hypervisor.type": "Hypervisor type", "label.hypervisor.type": "Hypervisor type",
"label.hypervisors": "Hypervisors", "label.hypervisors": "Hypervisors",
"label.hypervisorsnapshotreserve": "Hypervisor Snapshot reserve", "label.hypervisorsnapshotreserve": "Hypervisor Snapshot reserve",
@ -2813,7 +2814,7 @@
"label.windows": "Windows", "label.windows": "Windows",
"label.with.snapshotid": "with Snapshot ID", "label.with.snapshotid": "with Snapshot ID",
"label.write": "Write", "label.write": "Write",
"label.writeback": "Write-back disk caching", "label.writeback": "Write-back",
"label.writecachetype": "Write-cache Type", "label.writecachetype": "Write-cache Type",
"label.writeio": "Write (IO)", "label.writeio": "Write (IO)",
"label.writethrough": "Write-through", "label.writethrough": "Write-through",

View File

@ -773,6 +773,7 @@
"label.hourly": "A cada hora", "label.hourly": "A cada hora",
"label.hypervisor": "Virtualizador", "label.hypervisor": "Virtualizador",
"label.hypervisor.capabilities": "Recursos do virtualizador", "label.hypervisor.capabilities": "Recursos do virtualizador",
"label.hypervisor.default": "Padr\u00e3o do virtualizador",
"label.hypervisor.type": "Tipo do virtualizador", "label.hypervisor.type": "Tipo do virtualizador",
"label.hypervisors": "Virtualizadores", "label.hypervisors": "Virtualizadores",
"label.hypervisorsnapshotreserve": "Reserva de snapshot do virtualizador", "label.hypervisorsnapshotreserve": "Reserva de snapshot do virtualizador",
@ -1813,7 +1814,7 @@
"label.windows": "Windows", "label.windows": "Windows",
"label.with.snapshotid": "com o ID da snapshot", "label.with.snapshotid": "com o ID da snapshot",
"label.write": "Escreva", "label.write": "Escreva",
"label.writeback": "Cache de disco write-back", "label.writeback": "Write-back",
"label.writecachetype": "Tipo do cache de escrita", "label.writecachetype": "Tipo do cache de escrita",
"label.writeio": "Escrita (IO)", "label.writeio": "Escrita (IO)",
"label.writethrough": "Write-through", "label.writethrough": "Write-through",

View File

@ -467,6 +467,9 @@
<a-radio-button value="writethrough"> <a-radio-button value="writethrough">
{{ $t('label.writethrough') }} {{ $t('label.writethrough') }}
</a-radio-button> </a-radio-button>
<a-radio-button value="hypervisor_default">
{{ $t('label.hypervisor.default') }}
</a-radio-button>
</a-radio-group> </a-radio-group>
</a-form-item> </a-form-item>
<a-form-item :label="$t('label.qostype')" name="qostype" ref="qostype"> <a-form-item :label="$t('label.qostype')" name="qostype" ref="qostype">

View File

@ -211,6 +211,9 @@
<a-radio-button value="writethrough"> <a-radio-button value="writethrough">
{{ $t('label.writethrough') }} {{ $t('label.writethrough') }}
</a-radio-button> </a-radio-button>
<a-radio-button value="hypervisor_default">
{{ $t('label.hypervisor.default') }}
</a-radio-button>
</a-radio-group> </a-radio-group>
</a-form-item> </a-form-item>
<a-form-item v-if="isAdmin() || isDomainAdminAllowedToInformTags" name="tags" ref="tags"> <a-form-item v-if="isAdmin() || isDomainAdminAllowedToInformTags" name="tags" ref="tags">
@ -604,7 +607,7 @@ export default {
width: 80vw; width: 80vw;
@media (min-width: 800px) { @media (min-width: 800px) {
width: 430px; width: 480px;
} }
} }
</style> </style>