[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-10140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16268103#comment-16268103
 ] 

ASF GitHub Bot commented on CLOUDSTACK-10140:
---------------------------------------------

rhtyd closed pull request #2322: CLOUDSTACK-10140: Fix for when template is 
created from snapshot template.properties are corrupted
URL: https://github.com/apache/cloudstack/pull/2322
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/core/src/com/cloud/storage/template/TemplateLocation.java 
b/core/src/com/cloud/storage/template/TemplateLocation.java
index e52a635dc68..d10d05ae971 100644
--- a/core/src/com/cloud/storage/template/TemplateLocation.java
+++ b/core/src/com/cloud/storage/template/TemplateLocation.java
@@ -26,6 +26,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Properties;
+import java.util.Arrays;
 
 import org.apache.log4j.Logger;
 
@@ -81,12 +82,12 @@ public boolean purge() {
         boolean purged = true;
         String[] files = _storage.listFiles(_templatePath);
         for (String file : files) {
-            boolean r = _storage.delete(file);
-            if (!r) {
+            boolean isRemoved = _storage.delete(file);
+            if (!isRemoved) {
                 purged = false;
             }
             if (s_logger.isDebugEnabled()) {
-                s_logger.debug((r ? "R" : "Unable to r") + "emove " + file);
+                s_logger.debug((isRemoved ? "Removed " : "Unable to remove") + 
file);
             }
         }
 
@@ -97,43 +98,60 @@ public boolean load() throws IOException {
         try (FileInputStream strm = new FileInputStream(_file);) {
             _props.load(strm);
         } catch (IOException e) {
-            s_logger.warn("Unable to load the template properties", e);
+            s_logger.warn("Unable to load the template properties for '" + 
_file + "': ", e);
         }
 
         for (ImageFormat format : ImageFormat.values()) {
-            String ext = _props.getProperty(format.getFileExtension());
+            String currentExtension = format.getFileExtension();
+            String ext = _props.getProperty(currentExtension);
             if (ext != null) {
+                if (s_logger.isDebugEnabled()) {
+                    s_logger.debug("File extension '" + currentExtension + "' 
was found in '" + _file + "'.");
+                }
                 FormatInfo info = new FormatInfo();
                 info.format = format;
-                info.filename = _props.getProperty(format.getFileExtension() + 
".filename");
+                info.filename = _props.getProperty(currentExtension + 
".filename");
                 if (info.filename == null) {
+                    if (s_logger.isDebugEnabled()) {
+                        s_logger.debug("Property '" + currentExtension + 
".filename' was not found in '" + _file + "'. Current format is ignored.");
+                    }
                     continue;
                 }
-                info.size = 
NumbersUtil.parseLong(_props.getProperty(format.getFileExtension() + ".size"), 
-1);
+                if (s_logger.isDebugEnabled()) {
+                    s_logger.debug("Property '" + currentExtension + 
".filename' was found in '" + _file + "'. Current format will be parsed.");
+                }
+                info.size = 
NumbersUtil.parseLong(_props.getProperty(currentExtension + ".size"), -1);
                 _props.setProperty("physicalSize", Long.toString(info.size));
-                info.virtualSize = 
NumbersUtil.parseLong(_props.getProperty(format.getFileExtension() + 
".virtualsize"), -1);
+                info.virtualSize = 
NumbersUtil.parseLong(_props.getProperty(currentExtension + ".virtualsize"), 
-1);
                 _formats.add(info);
 
                 if (!checkFormatValidity(info)) {
                     _isCorrupted = true;
                     s_logger.warn("Cleaning up inconsistent information for " 
+ format);
                 }
+            } else {
+                if (s_logger.isDebugEnabled()) {
+                    s_logger.debug("Format extension '" + currentExtension + 
"' wasn't found in '" + _file + "'.");
+                }
             }
         }
 
         if (_props.getProperty("uniquename") == null || 
_props.getProperty("virtualsize") == null) {
+            if (s_logger.isDebugEnabled()) {
+                s_logger.debug("Property 'uniquename' or 'virtualsize' weren't 
found in '" + _file + "'. Loading failed.");
+            }
             return false;
         }
-
         return (_formats.size() > 0);
     }
 
     public boolean save() {
         for (FormatInfo info : _formats) {
-            _props.setProperty(info.format.getFileExtension(), "true");
-            _props.setProperty(info.format.getFileExtension() + ".filename", 
info.filename);
-            _props.setProperty(info.format.getFileExtension() + ".size", 
Long.toString(info.size));
-            _props.setProperty(info.format.getFileExtension() + 
".virtualsize", Long.toString(info.virtualSize));
+            String formatExtension = info.format.getFileExtension();
+            _props.setProperty(formatExtension, "true");
+            _props.setProperty(formatExtension + ".filename", info.filename);
+            _props.setProperty(formatExtension + ".size", 
Long.toString(info.size));
+            _props.setProperty(formatExtension + ".virtualsize", 
Long.toString(info.virtualSize));
         }
         try (FileOutputStream strm =  new FileOutputStream(_file);) {
             _props.store(strm, "");
@@ -205,10 +223,11 @@ protected FormatInfo deleteFormat(ImageFormat format) {
             FormatInfo info = it.next();
             if (info.format == format) {
                 it.remove();
-                _props.remove(format.getFileExtension());
-                _props.remove(format.getFileExtension() + ".filename");
-                _props.remove(format.getFileExtension() + ".size");
-                _props.remove(format.getFileExtension() + ".virtualsize");
+                String formatExtension = format.getFileExtension();
+                _props.remove(formatExtension);
+                for(String propertySuffix : 
Arrays.asList("filename","size","virtualsize")) {
+                        _props.remove(formatExtension + "." + propertySuffix);
+                }
                 return info;
             }
         }
diff --git 
a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
 
b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
index eb6f220f7ca..54c6b99cde9 100644
--- 
a/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
+++ 
b/services/secondary-storage/server/src/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java
@@ -521,12 +521,8 @@ protected Answer 
copySnapshotToTemplateFromNfsToNfs(CopyCommand cmd, SnapshotObj
                     bufferWriter.write("uniquename=" + destData.getName());
                     bufferWriter.write("\n");
                     bufferWriter.write("filename=" + fileName);
-                    bufferWriter.write("\n");
-                    long size = _storage.getSize(destFileFullPath);
-                    bufferWriter.write("size=" + size);
-                    bufferWriter.close();
-                    writer.close();
-
+                }
+                try {
                     /**
                      * Snapshots might be in either QCOW2 or RAW image format
                      *


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> When template is created from snapshot template.properties are corrupted
> ------------------------------------------------------------------------
>
>                 Key: CLOUDSTACK-10140
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-10140
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>          Components: Secondary Storage
>    Affects Versions: 4.10.1.0
>            Reporter: Ivan Kudryavtsev
>            Priority: Critical
>
> 1.st is for downloaded template
> root@cs2-secstorage-nfs1:/secondary/template/tmpl/2/210# cat 
> template.properties 
> #
> #Sun Nov 12 14:28:44 UTC 2017
> filename=5bf56664-4030-3047-a479-07494452907f.qcow2
> id=210
> qcow2.size=3254517760
> public=true
> uniquename=210-2-d985ccb6-a6cf-3c4e-9756-06dd4d856533
> qcow2.virtualsize=10737418240
> virtualsize=10737418240
> checksum=2d0d1133faf3766a76c328f774c421ca
> hvm=true
> description=aaa
> qcow2=true
> qcow2.filename=5bf56664-4030-3047-a479-07494452907f.qcow2
> size=3254517760
> 2.nd is for created from the snapshot
> Those snapshots are removed upon SSVM reload/recreation.
> root@cs2-secstorage-nfs1:/secondary/template/tmpl/2/209# cat 
> template.properties 
> uniquename=209-2-3accb15b-8647-356b-9791-9e2f1ec36b6b
> filename=bbab2601-050d-4c18-ae35-00f2ba44de28.qcow2
> size=3254517760
> qcow2.filename=bbab2601-050d-4c18-ae35-00f2ba44de28.qcow2
> qcow2.virtualsize=10737418240
> public=true
> id=1



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to