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

dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit a82a2429f496f3c5680bf8304ac26f95c9a21fc9
Merge: b75742da431 a2690e98644
Author: Daan Hoogland <d...@onecht.net>
AuthorDate: Thu Nov 14 15:59:35 2024 +0100

    Merge branch '4.19'

 .../kvm/storage/KVMStorageProcessor.java           | 28 ++++++++++++++++++----
 tools/build/build_asf.sh                           | 10 ++++----
 2 files changed, 29 insertions(+), 9 deletions(-)

diff --cc 
plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/KVMStorageProcessor.java
index 391c7674552,75443605c31..ffffe877e6e
--- 
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
@@@ -18,74 -18,6 +18,81 @@@
   */
  package com.cloud.hypervisor.kvm.storage;
  
 +import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
 +import static com.cloud.utils.storage.S3.S3Utils.putFile;
 +
 +import java.io.File;
 +import java.io.FileNotFoundException;
 +import java.io.FileOutputStream;
 +import java.io.IOException;
 +import java.nio.file.Files;
++import java.nio.file.Path;
 +import java.nio.file.Paths;
 +import java.text.DateFormat;
 +import java.text.SimpleDateFormat;
++import java.util.ArrayList;
 +import java.util.Arrays;
 +import java.util.Date;
 +import java.util.HashMap;
 +import java.util.HashSet;
 +import java.util.List;
 +import java.util.Map;
 +import java.util.Set;
 +import java.util.UUID;
 +import java.util.stream.Collectors;
 +
 +import javax.naming.ConfigurationException;
 +
 +import org.apache.cloudstack.agent.directdownload.DirectDownloadAnswer;
 +import org.apache.cloudstack.agent.directdownload.DirectDownloadCommand;
 +import org.apache.cloudstack.direct.download.DirectDownloadHelper;
 +import org.apache.cloudstack.direct.download.DirectTemplateDownloader;
 +import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
 +import org.apache.cloudstack.storage.command.AttachAnswer;
 +import org.apache.cloudstack.storage.command.AttachCommand;
 +import 
org.apache.cloudstack.storage.command.CheckDataStoreStoragePolicyComplainceCommand;
 +import org.apache.cloudstack.storage.command.CopyCmdAnswer;
 +import org.apache.cloudstack.storage.command.CopyCommand;
 +import org.apache.cloudstack.storage.command.CreateObjectAnswer;
 +import org.apache.cloudstack.storage.command.CreateObjectCommand;
 +import org.apache.cloudstack.storage.command.DeleteCommand;
 +import org.apache.cloudstack.storage.command.DettachAnswer;
 +import org.apache.cloudstack.storage.command.DettachCommand;
 +import org.apache.cloudstack.storage.command.ForgetObjectCmd;
 +import org.apache.cloudstack.storage.command.IntroduceObjectCmd;
 +import org.apache.cloudstack.storage.command.ResignatureAnswer;
 +import org.apache.cloudstack.storage.command.ResignatureCommand;
 +import org.apache.cloudstack.storage.command.SnapshotAndCopyAnswer;
 +import org.apache.cloudstack.storage.command.SnapshotAndCopyCommand;
 +import org.apache.cloudstack.storage.command.SyncVolumePathCommand;
++import org.apache.cloudstack.storage.formatinspector.Qcow2Inspector;
 +import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
 +import org.apache.cloudstack.storage.to.SnapshotObjectTO;
 +import org.apache.cloudstack.storage.to.TemplateObjectTO;
 +import org.apache.cloudstack.storage.to.VolumeObjectTO;
++import org.apache.cloudstack.utils.cryptsetup.KeyFile;
++import org.apache.cloudstack.utils.qemu.QemuImageOptions;
 +import org.apache.cloudstack.utils.qemu.QemuImg;
 +import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 +import org.apache.cloudstack.utils.qemu.QemuImgException;
 +import org.apache.cloudstack.utils.qemu.QemuImgFile;
 +import org.apache.cloudstack.utils.qemu.QemuObject;
++import org.apache.cloudstack.utils.qemu.QemuObject.EncryptFormat;
 +import org.apache.commons.collections.MapUtils;
 +import org.apache.commons.io.FileUtils;
 +import org.apache.commons.lang3.BooleanUtils;
 +import org.apache.commons.lang3.StringUtils;
 +import org.apache.commons.lang3.builder.ToStringBuilder;
 +import org.apache.commons.lang3.builder.ToStringStyle;
 +import org.apache.logging.log4j.Logger;
 +import org.apache.logging.log4j.LogManager;
++
 +import org.libvirt.Connect;
 +import org.libvirt.Domain;
 +import org.libvirt.DomainInfo;
 +import org.libvirt.DomainSnapshot;
 +import org.libvirt.LibvirtException;
 +
  import com.ceph.rados.IoCTX;
  import com.ceph.rados.Rados;
  import com.ceph.rados.exceptions.ErrorCode;
@@@ -134,13 -66,80 +141,10 @@@ import com.cloud.utils.exception.CloudR
  import com.cloud.utils.script.Script;
  import com.cloud.utils.storage.S3.S3Utils;
  import com.cloud.vm.VmDetailConstants;
 -import org.apache.cloudstack.agent.directdownload.DirectDownloadAnswer;
 -import org.apache.cloudstack.agent.directdownload.DirectDownloadCommand;
 -import org.apache.cloudstack.direct.download.DirectDownloadHelper;
 -import org.apache.cloudstack.direct.download.DirectTemplateDownloader;
 -import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
 -import org.apache.cloudstack.storage.command.AttachAnswer;
 -import org.apache.cloudstack.storage.command.AttachCommand;
 -import 
org.apache.cloudstack.storage.command.CheckDataStoreStoragePolicyComplainceCommand;
 -import org.apache.cloudstack.storage.command.CopyCmdAnswer;
 -import org.apache.cloudstack.storage.command.CopyCommand;
 -import org.apache.cloudstack.storage.command.CreateObjectAnswer;
 -import org.apache.cloudstack.storage.command.CreateObjectCommand;
 -import org.apache.cloudstack.storage.command.DeleteCommand;
 -import org.apache.cloudstack.storage.command.DettachAnswer;
 -import org.apache.cloudstack.storage.command.DettachCommand;
 -import org.apache.cloudstack.storage.command.ForgetObjectCmd;
 -import org.apache.cloudstack.storage.command.IntroduceObjectCmd;
 -import org.apache.cloudstack.storage.command.ResignatureAnswer;
 -import org.apache.cloudstack.storage.command.ResignatureCommand;
 -import org.apache.cloudstack.storage.command.SnapshotAndCopyAnswer;
 -import org.apache.cloudstack.storage.command.SnapshotAndCopyCommand;
 -import org.apache.cloudstack.storage.command.SyncVolumePathCommand;
 -import org.apache.cloudstack.storage.formatinspector.Qcow2Inspector;
 -import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
 -import org.apache.cloudstack.storage.to.SnapshotObjectTO;
 -import org.apache.cloudstack.storage.to.TemplateObjectTO;
 -import org.apache.cloudstack.storage.to.VolumeObjectTO;
--import org.apache.cloudstack.utils.cryptsetup.KeyFile;
--import org.apache.cloudstack.utils.qemu.QemuImageOptions;
 -import org.apache.cloudstack.utils.qemu.QemuImg;
 -import org.apache.cloudstack.utils.qemu.QemuImg.PhysicalDiskFormat;
 -import org.apache.cloudstack.utils.qemu.QemuImgException;
 -import org.apache.cloudstack.utils.qemu.QemuImgFile;
 -import org.apache.cloudstack.utils.qemu.QemuObject;
--import org.apache.cloudstack.utils.qemu.QemuObject.EncryptFormat;
- import java.util.ArrayList;
 -import org.apache.commons.collections.MapUtils;
 -import org.apache.commons.io.FileUtils;
 -import org.apache.commons.lang3.BooleanUtils;
 -import org.apache.commons.lang3.StringUtils;
 -import org.apache.commons.lang3.builder.ToStringBuilder;
 -import org.apache.commons.lang3.builder.ToStringStyle;
 -import org.apache.log4j.Logger;
 -import org.libvirt.Connect;
 -import org.libvirt.Domain;
 -import org.libvirt.DomainInfo;
 -import org.libvirt.DomainSnapshot;
 -import org.libvirt.LibvirtException;
+ 
 -import javax.naming.ConfigurationException;
 -import java.io.File;
 -import java.io.FileNotFoundException;
 -import java.io.FileOutputStream;
 -import java.io.IOException;
 -import java.nio.file.Files;
 -import java.nio.file.Path;
 -import java.nio.file.Paths;
 -import java.text.DateFormat;
 -import java.text.SimpleDateFormat;
 -import java.util.ArrayList;
 -import java.util.Arrays;
 -import java.util.Date;
 -import java.util.HashMap;
 -import java.util.HashSet;
 -import java.util.List;
 -import java.util.Map;
 -import java.util.Set;
 -import java.util.UUID;
 -import java.util.stream.Collectors;
 -
 -import static com.cloud.utils.NumbersUtil.toHumanReadableSize;
 -import static com.cloud.utils.storage.S3.S3Utils.putFile;
  
  public class KVMStorageProcessor implements StorageProcessor {
 -    private static final Logger s_logger = 
Logger.getLogger(KVMStorageProcessor.class);
 +    protected Logger logger = LogManager.getLogger(getClass());
      private final KVMStoragePoolManager storagePoolMgr;
      private final LibvirtComputingResource resource;
      private StorageLayer storageLayer;
@@@ -2452,11 -2448,27 +2456,27 @@@
  
              template = 
storagePoolMgr.createPhysicalDiskFromDirectDownloadTemplate(tempFilePath, 
destTemplatePath, destPool, cmd.getFormat(), cmd.getWaitInMillSeconds());
  
+             String templatePath = template.getPath();
+             if (templatePath != null) {
+                 try {
+                     Qcow2Inspector.validateQcow2File(templatePath);
+                 } catch (RuntimeException e) {
+                     try {
+                         Files.deleteIfExists(Path.of(templatePath));
+                     } catch (IOException ioException) {
 -                        s_logger.warn(String.format("Unable to remove file 
[%s]; consider removing it manually.", templatePath), ioException);
++                        logger.warn("Unable to remove file [{}]; consider 
removing it manually.", templatePath, ioException);
+                     }
+ 
 -                    s_logger.error(String.format("The downloaded file [%s] is 
not a valid QCOW2.", templatePath), e);
++                    logger.error("The downloaded file [{}] is not a valid 
QCOW2.", templatePath, e);
+                     return new DirectDownloadAnswer(false, "The downloaded 
file is not a valid QCOW2. Ask the administrator to check the logs for more 
details.", true);
+                 }
+             }
+ 
              if (!storagePoolMgr.disconnectPhysicalDisk(pool.getPoolType(), 
pool.getUuid(), destTemplatePath)) {
 -                s_logger.warn("Unable to disconnect physical disk at path: " 
+ destTemplatePath + ", in storage pool id: " + pool.getUuid());
 +                logger.warn("Unable to disconnect physical disk at path: " + 
destTemplatePath + ", in storage pool id: " + pool.getUuid());
              }
          } catch (CloudRuntimeException e) {
 -            s_logger.warn("Error downloading template " + cmd.getTemplateId() 
+ " due to: " + e.getMessage());
 +            logger.warn("Error downloading template " + cmd.getTemplateId() + 
" due to: " + e.getMessage());
              return new DirectDownloadAnswer(false, "Unable to download 
template: " + e.getMessage(), true);
          } catch (IllegalArgumentException e) {
              return new DirectDownloadAnswer(false, "Unable to create direct 
downloader: " + e.getMessage(), true);

Reply via email to