From e6d168029395fd942fba6ad2257134e3df36f850 Mon Sep 17 00:00:00 2001 From: Henrique Sato Date: Wed, 15 Jan 2025 13:43:46 -0300 Subject: [PATCH] Add disk offering Hypervisor default cache mode --- api/src/main/java/com/cloud/offering/DiskOffering.java | 2 +- .../org/apache/cloudstack/storage/to/VolumeObjectTO.java | 7 ++++++- .../main/resources/META-INF/db/schema-42010to42100.sql | 3 +++ .../com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java | 2 +- .../datastore/adapter/ProviderAdapterDiskOffering.java | 8 +++++--- .../com/cloud/configuration/ConfigurationManagerImpl.java | 2 +- ui/public/locales/en.json | 3 ++- ui/public/locales/pt_BR.json | 3 ++- ui/src/views/offering/AddComputeOffering.vue | 3 +++ ui/src/views/offering/AddDiskOffering.vue | 5 ++++- 10 files changed, 28 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/com/cloud/offering/DiskOffering.java b/api/src/main/java/com/cloud/offering/DiskOffering.java index e1c41f77cbf5..02dcd1aa474f 100644 --- a/api/src/main/java/com/cloud/offering/DiskOffering.java +++ b/api/src/main/java/com/cloud/offering/DiskOffering.java @@ -37,7 +37,7 @@ enum State { State getState(); enum DiskCacheMode { - NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); + HYPERVISOR_DEFAULT("hypervisor_default"), NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); private final String _diskCacheMode; diff --git a/core/src/main/java/org/apache/cloudstack/storage/to/VolumeObjectTO.java b/core/src/main/java/org/apache/cloudstack/storage/to/VolumeObjectTO.java index 4d1d0bf90971..7040542a1c7f 100644 --- a/core/src/main/java/org/apache/cloudstack/storage/to/VolumeObjectTO.java +++ b/core/src/main/java/org/apache/cloudstack/storage/to/VolumeObjectTO.java @@ -20,6 +20,7 @@ package org.apache.cloudstack.storage.to; import com.cloud.agent.api.LogLevel; +import com.cloud.offering.DiskOffering; import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo; import com.cloud.agent.api.to.DataObjectType; @@ -112,8 +113,8 @@ public VolumeObjectTO(VolumeInfo volume) { iopsWriteRate = volume.getIopsWriteRate(); iopsWriteRateMax = volume.getIopsWriteRateMax(); iopsWriteRateMaxLength = volume.getIopsWriteRateMaxLength(); - cacheMode = volume.getCacheMode(); hypervisorType = volume.getHypervisorType(); + setCacheMode(volume.getCacheMode()); setDeviceId(volume.getDeviceId()); this.migrationOptions = volume.getMigrationOptions(); this.directDownload = volume.isDirectDownload(); @@ -337,6 +338,10 @@ public void setDeviceId(Long deviceId) { } public void setCacheMode(DiskCacheMode cacheMode) { + if (DiskCacheMode.HYPERVISOR_DEFAULT.equals(cacheMode) && !Hypervisor.HypervisorType.KVM.equals(hypervisorType)) { + this.cacheMode = DiskOffering.DiskCacheMode.NONE; + return; + } this.cacheMode = cacheMode; } diff --git a/engine/schema/src/main/resources/META-INF/db/schema-42010to42100.sql b/engine/schema/src/main/resources/META-INF/db/schema-42010to42100.sql index 47e7bebbee4f..971de2e341df 100644 --- a/engine/schema/src/main/resources/META-INF/db/schema-42010to42100.sql +++ b/engine/schema/src/main/resources/META-INF/db/schema-42010to42100.sql @@ -31,3 +31,6 @@ SELECT uuid(), role_id, 'quotaCreditsList', permission, sort_order FROM `cloud`.`role_permissions` rp WHERE rp.rule = 'quotaStatement' AND NOT EXISTS(SELECT 1 FROM cloud.role_permissions rp_ WHERE rp.role_id = rp_.role_id AND rp_.rule = 'quotaCreditsList'); + +-- 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"'); diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java index 39373ab6e3bc..d3fbf30d71ac 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java @@ -706,7 +706,7 @@ public String toString() { } public enum DiskCacheMode { - NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); + HYPERVISOR_DEFAULT("default"), NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); String _diskCacheMode; DiskCacheMode(String cacheMode) { diff --git a/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderAdapterDiskOffering.java b/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderAdapterDiskOffering.java index 1db5efbb8ec6..427a4917145c 100644 --- a/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderAdapterDiskOffering.java +++ b/plugins/storage/volume/adaptive/src/main/java/org/apache/cloudstack/storage/datastore/adapter/ProviderAdapterDiskOffering.java @@ -34,7 +34,7 @@ public ProviderAdapterDiskOffering(DiskOffering hiddenDiskOffering) { this.type = ProvisioningType.getProvisioningType(hiddenDiskOffering.getProvisioningType().toString()); } if (hiddenDiskOffering.getCacheMode() != null) { - this.diskCacheMode = DiskCacheMode.getDiskCasehMode(hiddenDiskOffering.getCacheMode().toString()); + this.diskCacheMode = DiskCacheMode.getDiskCacheMode(hiddenDiskOffering.getCacheMode().toString()); } if (hiddenDiskOffering.getState() != null) { this.state = State.valueOf(hiddenDiskOffering.getState().toString()); @@ -166,7 +166,7 @@ enum State { } enum DiskCacheMode { - NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); + HYPERVISOR_DEFAULT("hypervisor_default"), NONE("none"), WRITEBACK("writeback"), WRITETHROUGH("writethrough"); private final String _diskCacheMode; @@ -179,13 +179,15 @@ public String toString() { return _diskCacheMode; } - public static DiskCacheMode getDiskCasehMode(String cacheMode) { + public static DiskCacheMode getDiskCacheMode(String cacheMode) { if (cacheMode.equals(NONE._diskCacheMode)) { return NONE; } else if (cacheMode.equals(WRITEBACK._diskCacheMode)) { return WRITEBACK; } else if (cacheMode.equals(WRITETHROUGH._diskCacheMode)) { return WRITETHROUGH; + } else if (cacheMode.equals(HYPERVISOR_DEFAULT._diskCacheMode)) { + return HYPERVISOR_DEFAULT; } else { throw new NotImplementedException("Invalid cache mode specified: " + cacheMode); } diff --git a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java index d7e2160ef35b..2730b4321aab 100644 --- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java +++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java @@ -8061,7 +8061,7 @@ protected void validateCacheMode(String cacheMode){ !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)); + "valid cache mode parameters: none, writeback, writethrough or hypervisor_default.", cacheMode)); } } diff --git a/ui/public/locales/en.json b/ui/public/locales/en.json index 820f08b8cb4f..539c9fecdc1a 100644 --- a/ui/public/locales/en.json +++ b/ui/public/locales/en.json @@ -1101,6 +1101,7 @@ "label.hourly": "Hourly", "label.hypervisor": "Hypervisor", "label.hypervisor.capabilities": "Hypervisor capabilities", +"label.hypervisor.default": "Hypervisor default", "label.hypervisor.type": "Hypervisor type", "label.hypervisors": "Hypervisors", "label.hypervisorsnapshotreserve": "Hypervisor Snapshot reserve", @@ -2596,7 +2597,7 @@ "label.windows": "Windows", "label.with.snapshotid": "with Snapshot ID", "label.write": "Write", -"label.writeback": "Write-back disk caching", +"label.writeback": "Write-back", "label.writecachetype": "Write-cache Type", "label.writeio": "Write (IO)", "label.writethrough": "Write-through", diff --git a/ui/public/locales/pt_BR.json b/ui/public/locales/pt_BR.json index 511c8714daa8..95bc45cf66dc 100644 --- a/ui/public/locales/pt_BR.json +++ b/ui/public/locales/pt_BR.json @@ -770,6 +770,7 @@ "label.hourly": "A cada hora", "label.hypervisor": "Virtualizador", "label.hypervisor.capabilities": "Recursos do virtualizador", +"label.hypervisor.default": "Padr\u00e3o do virtualizador", "label.hypervisor.type": "Tipo do virtualizador", "label.hypervisors": "Virtualizadores", "label.hypervisorsnapshotreserve": "Reserva de snapshot do virtualizador", @@ -1812,7 +1813,7 @@ "label.windows": "Windows", "label.with.snapshotid": "com o ID da snapshot", "label.write": "Escreva", -"label.writeback": "Cache de disco write-back", +"label.writeback": "Write-back", "label.writecachetype": "Tipo do cache de escrita", "label.writeio": "Escrita (IO)", "label.writethrough": "Write-through", diff --git a/ui/src/views/offering/AddComputeOffering.vue b/ui/src/views/offering/AddComputeOffering.vue index 1fd600ae566e..787ce36e2c40 100644 --- a/ui/src/views/offering/AddComputeOffering.vue +++ b/ui/src/views/offering/AddComputeOffering.vue @@ -409,6 +409,9 @@ {{ $t('label.writethrough') }} + + {{ $t('label.hypervisor.default') }} + diff --git a/ui/src/views/offering/AddDiskOffering.vue b/ui/src/views/offering/AddDiskOffering.vue index 5cb1ff8bde92..669d7beca1a2 100644 --- a/ui/src/views/offering/AddDiskOffering.vue +++ b/ui/src/views/offering/AddDiskOffering.vue @@ -211,6 +211,9 @@ {{ $t('label.writethrough') }} + + {{ $t('label.hypervisor.default') }} + @@ -601,7 +604,7 @@ export default { width: 80vw; @media (min-width: 800px) { - width: 430px; + width: 480px; } }