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 <[email protected]>
AuthorDate: Tue Jun 24 09:23:57 2025 -0300
Block volume shrink on Xen (#11004)
Co-authored-by: João Jandre <[email protected]>
---
.../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"