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

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


The following commit(s) were added to refs/heads/4.14 by this push:
     new 58a3f90  server: fix failed to remove template/iso if upload from 
local fails (#4626)
58a3f90 is described below

commit 58a3f90a5146e93d2a4699cef439319f8e664f7d
Author: Wei Zhou <[email protected]>
AuthorDate: Sat Mar 6 10:23:40 2021 +0100

    server: fix failed to remove template/iso if upload from local fails (#4626)
    
    * server: fix failed to remove template/iso if upload from local fails
    
    When upload template/iso/volume from local fails, the install_path will not 
be a full path of file so removing it will fail.
    
    ```
    mysql> select install_path from template_store_ref;
    +--------------------------------------------------------------------+
    | install_path                                                       |
    +--------------------------------------------------------------------+
    | template/tmpl/1/3/805f4763-248e-40ec-b79a-b868cc480d0a.qcow2       |
    | template/tmpl/1/4/c7e32c9e-5e72-3726-85cf-aa5ccd84118d.qcow2       |
    | template/tmpl/2/201/bc4f4f08-138a-31b8-af1a-d4450eff7982.qcow2     |
    | template/tmpl/2/202                                                |
    | template/tmpl/2/203/203-2-d47f8cde-a2a8-31e7-a826-2628ad98a6c8.iso |
    | template/tmpl/2/204                                                |
    | template/tmpl/5/205                                                |
    | template/tmpl/2/206                                                |
    | template/tmpl/2/207                                                |
    | template/tmpl/2/208                                                |
    | template/tmpl/2/209                                                |
    | template/tmpl/2/210                                                |
    +--------------------------------------------------------------------+
    12 rows in set (0.00 sec)
    
    mysql> select install_path from volume_store_ref;
    +---------------------------------------------------------+
    | install_path                                            |
    +---------------------------------------------------------+
    | volumes/2/22                                            |
    | volumes/2/19/f93face9-6521-4184-b89a-cb07f86bbae8.qcow2 |
    | volumes/2/23                                            |
    | volumes/2/24                                            |
    +---------------------------------------------------------+
    4 rows in set (0.00 sec)
    ```
    
    * server: disallow removing template/iso in NotUpload and UploadInProgress 
state
---
 server/src/main/java/com/cloud/template/TemplateAdapterBase.java  | 8 ++++++++
 .../cloudstack/storage/resource/NfsSecondaryStorageResource.java  | 6 ++++++
 2 files changed, 14 insertions(+)

diff --git a/server/src/main/java/com/cloud/template/TemplateAdapterBase.java 
b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
index 0e88c14..c42ca10 100644
--- a/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
+++ b/server/src/main/java/com/cloud/template/TemplateAdapterBase.java
@@ -456,6 +456,10 @@ public abstract class TemplateAdapterBase extends 
AdapterBase implements Templat
             throw new InvalidParameterValueException("Please specify a valid 
template.");
         }
 
+        if (template.getState() == VirtualMachineTemplate.State.NotUploaded || 
template.getState() == VirtualMachineTemplate.State.UploadInProgress) {
+            throw new InvalidParameterValueException("The template is either 
getting uploaded or it may be initiated shortly, please wait for it to be 
completed");
+        }
+
         return new TemplateProfile(userId, template, zoneId);
     }
 
@@ -495,6 +499,10 @@ public abstract class TemplateAdapterBase extends 
AdapterBase implements Templat
             throw new InvalidParameterValueException("Please specify a valid 
iso.");
         }
 
+        if (template.getState() == VirtualMachineTemplate.State.NotUploaded || 
template.getState() == VirtualMachineTemplate.State.UploadInProgress) {
+            throw new InvalidParameterValueException("The iso is either 
getting uploaded or it may be initiated shortly, please wait for it to be 
completed");
+        }
+
         return new TemplateProfile(userId, template, zoneId);
     }
 
diff --git 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index f4ae30e..274815d 100644
--- 
a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ 
b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -2253,6 +2253,9 @@ public class NfsSecondaryStorageResource extends 
ServerResourceBase implements S
             File tmpltParent = null;
             if (tmpltPath.exists() && tmpltPath.isDirectory()) {
                 tmpltParent = tmpltPath;
+            } else if (absoluteTemplatePath.endsWith(File.separator + 
obj.getId())) {
+                // the path ends with <account id>/<template id>, if upload 
fails
+                tmpltParent = tmpltPath;
             } else {
                 tmpltParent = tmpltPath.getParentFile();
             }
@@ -2357,6 +2360,9 @@ public class NfsSecondaryStorageResource extends 
ServerResourceBase implements S
             if (volPath.exists() && volPath.isDirectory()) {
                 // for vmware, absoluteVolumePath represents a directory where 
volume files are located.
                 tmpltParent = volPath;
+            } else if (absoluteVolumePath.endsWith(File.separator + 
obj.getId())) {
+                // the path ends with <account id>/<volume id>, if upload fails
+                tmpltParent = volPath;
             } else {
                 // for other hypervisors, the volume .vhd or .qcow2 file path 
is passed
                 tmpltParent = new File(absoluteVolumePath).getParentFile();

Reply via email to