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 <48719461+joaojan...@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 <j...@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"

Reply via email to