server: set download volume format to qcow2 for KVM volumes (#11198)

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 4ea8d1e..91d5cf8 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 @@
         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 d9a12d3..179d68e 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 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 @@
         }
 
         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);
         }