You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2025/09/26 18:25:16 UTC

(cloudstack) branch 4.20 updated: server: set download volume format to qcow2 for KVM volumes (#11198)

This is an automated email from the ASF dual-hosted git repository.

dahn 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 318a4f2b6ec server: set download volume format to qcow2 for KVM volumes (#11198)
318a4f2b6ec is described below

commit 318a4f2b6ece664c6bee923fc2b10828190d7203
Author: Wei Zhou <we...@apache.org>
AuthorDate: Fri Sep 26 20:25:11 2025 +0200

    server: set download volume format to qcow2 for KVM volumes (#11198)
---
 .../com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java |  2 +-
 .../datastore/driver/CloudStackImageStoreDriverImpl.java      | 11 ++++++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index 4ea8d1e80fb..91d5cf81d6f 100644
--- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
+++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
@@ -587,7 +587,7 @@ public class KVMStorageProcessor implements StorageProcessor {
         try {
             final String volumeName = UUID.randomUUID().toString();
 
-            final String destVolumeName = volumeName + "." + destFormat.getFileExtension();
+            final String destVolumeName = volumeName + "." + ImageFormat.QCOW2.getFileExtension();
             final KVMPhysicalDisk volume = storagePoolMgr.getPhysicalDisk(primaryStore.getPoolType(), primaryStore.getUuid(), srcVolumePath);
             volume.setFormat(PhysicalDiskFormat.valueOf(srcFormat.toString()));
 
diff --git a/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java b/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java
index d9a12d382ba..179d68efea7 100644
--- a/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java
+++ b/plugins/storage/image/default/src/main/java/org/apache/cloudstack/storage/datastore/driver/CloudStackImageStoreDriverImpl.java
@@ -23,7 +23,9 @@ import java.util.UUID;
 import javax.inject.Inject;
 
 import com.cloud.agent.api.storage.DeleteEntityDownloadURLCommand;
+import com.cloud.agent.api.to.DataObjectType;
 import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
 import com.cloud.storage.Upload;
 import com.cloud.utils.StringUtils;
 
@@ -72,7 +74,14 @@ public class CloudStackImageStoreDriverImpl extends NfsImageStoreDriverImpl {
         }
 
         if (format != null) {
-            objectNameInUrl = objectNameInUrl + "." + format.getFileExtension();
+            if (dataObject.getTO() != null
+                    && DataObjectType.VOLUME.equals(dataObject.getTO().getObjectType())
+                    && HypervisorType.KVM.equals(dataObject.getTO().getHypervisorType())) {
+                // Fix: The format of KVM volumes on image store is qcow2
+                objectNameInUrl = objectNameInUrl + "." + ImageFormat.QCOW2.getFileExtension();
+            } else {
+                objectNameInUrl = objectNameInUrl + "." + format.getFileExtension();
+            }
         } else if (installPath.lastIndexOf(".") != -1) {
             objectNameInUrl = objectNameInUrl + "." + installPath.substring(installPath.lastIndexOf(".") + 1);
         }