You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by gu...@apache.org on 2025/06/24 12:24:06 UTC
(cloudstack) branch 4.20 updated: Block volume shrink on Xen (#11004)
This is an automated email from the ASF dual-hosted git repository.
gutoveronezi pushed a commit to branch 4.20
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.20 by this push:
new ba0204f8edd Block volume shrink on Xen (#11004)
ba0204f8edd is described below
commit ba0204f8edd6140d893e92bf33522f9a50637d8e
Author: João Jandre <48...@users.noreply.github.com>
AuthorDate: Tue Jun 24 09:23:57 2025 -0300
Block volume shrink on Xen (#11004)
Co-authored-by: João Jandre <jo...@scclouds.com.br>
---
.../resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java | 7 +++++--
server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java | 3 +++
ui/src/views/storage/ChangeOfferingForVolume.vue | 2 +-
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java
index 2ddf1bd1851..abf46b2771c 100755
--- a/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java
+++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/wrapper/xenbase/CitrixResizeVolumeCommandWrapper.java
@@ -49,9 +49,12 @@ public final class CitrixResizeVolumeCommandWrapper extends CommandWrapper<Resiz
try {
- if (command.getCurrentSize() >= newSize) {
- logger.info("No need to resize volume: " + volId +", current size " + toHumanReadableSize(command.getCurrentSize()) + " is same as new size " + toHumanReadableSize(newSize));
+ if (command.getCurrentSize() == newSize) {
+ logger.info("No need to resize volume [{}], current size [{}] is same as new size [{}].", volId, toHumanReadableSize(command.getCurrentSize()), toHumanReadableSize(newSize));
return new ResizeVolumeAnswer(command, true, "success", newSize);
+ } else if (command.getCurrentSize() > newSize) {
+ logger.error("XenServer does not support volume shrink. Volume [{}] current size [{}] is smaller than new size [{}]", volId, toHumanReadableSize(command.getCurrentSize()), toHumanReadableSize(newSize));
+ return new ResizeVolumeAnswer(command, false, "operation not supported");
}
if (command.isManaged()) {
resizeSr(conn, command);
diff --git a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
index 6a2aa09c38a..84e4bbf258f 100644
--- a/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
+++ b/server/src/main/java/com/cloud/storage/VolumeApiServiceImpl.java
@@ -2429,6 +2429,9 @@ public class VolumeApiServiceImpl extends ManagerBase implements VolumeApiServic
throw new InvalidParameterValueException("Going from existing size of " + currentSize + " to size of " + newSize + " would shrink the volume."
+ "Need to sign off by supplying the shrinkok parameter with value of true.");
}
+ if (ApiDBUtils.getHypervisorTypeFromFormat(volume.getDataCenterId(), volume.getFormat()) == HypervisorType.XenServer) {
+ throw new InvalidParameterValueException("Shrink volume is not supported for the XenServer hypervisor.");
+ }
}
}
/* Check resource limit for this account */
diff --git a/ui/src/views/storage/ChangeOfferingForVolume.vue b/ui/src/views/storage/ChangeOfferingForVolume.vue
index 5ab80390999..dedc2e8dc04 100644
--- a/ui/src/views/storage/ChangeOfferingForVolume.vue
+++ b/ui/src/views/storage/ChangeOfferingForVolume.vue
@@ -90,7 +90,7 @@
:checked="autoMigrate"
@change="val => { autoMigrate = val }"/>
</a-form-item>
- <a-form-item name="shrinkOk" ref="shrinkOk" :label="$t('label.shrinkok')">
+ <a-form-item name="shrinkOk" ref="shrinkOk" :label="$t('label.shrinkok')" v-if="!['XenServer'].includes(resource.hypervisor)">
<a-switch
v-model:checked="form.shrinkOk"
:checked="shrinkOk"