You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by de...@apache.org on 2013/12/12 10:23:01 UTC

[2/2] git commit: updated refs/heads/4.3 to 23bc02d

CLOUDSTACK-5462: Hyperv agent confused by existing volume of different
image type. Works by avoiding volume image format inference errors and
removing existing files with same name, but different format.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/23bc02d1
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/23bc02d1
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/23bc02d1

Branch: refs/heads/4.3
Commit: 23bc02d12a0aa7941eec2a85d5bd785ebbb6d725
Parents: 388510f
Author: Donal Lafferty <do...@citrix.com>
Authored: Thu Dec 12 21:31:14 2013 +0530
Committer: Devdeep Singh <de...@gmail.com>
Committed: Thu Dec 12 14:53:33 2013 +0530

----------------------------------------------------------------------
 .../HypervResource/HypervResourceController.cs  | 33 +++++++++++++-------
 1 file changed, 22 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/23bc02d1/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
index 04b6c3a..5ec14cd 100644
--- a/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
+++ b/plugins/hypervisors/hyperv/DotNet/ServerResource/HypervResource/HypervResourceController.cs
@@ -1232,13 +1232,19 @@ namespace HypervResource
                         }
                     }
 
-                    // Already exists?
+                    // Template already downloaded?
                     if (destFile != null && File.Exists(destFile) &&
                         !String.IsNullOrEmpty(destTemplateObjectTO.checksum))
                     {
                         // TODO: checksum fails us, because it is of the compressed image.
                         // ASK: should we store the compressed or uncompressed version or is the checksum not calculated correctly?
+                        logger.Debug(CloudStackTypes.CopyCommand + " calling VerifyChecksum to see if we already have the file at " + destFile);
                         result = VerifyChecksum(destFile, destTemplateObjectTO.checksum);
+                        if (!result)
+                        {
+                            result = true;
+                            logger.Debug(CloudStackTypes.CopyCommand + " existing file has different checksum " + destFile);
+                        }
                     }
 
                     // Do we have to create a new one?
@@ -1320,25 +1326,30 @@ namespace HypervResource
                         // Create volume from a template?
                         else if (srcTemplateObjectTO != null && destVolumeObjectTO != null)
                         {
-                            if (destVolumeObjectTO.format == null)
+                            // VolumeObjectTO guesses file extension based on existing files
+                            // this can be wrong if the previous file had a different file type
+                            var guessedDestFile = destVolumeObjectTO.FullFileName;
+                            if (File.Exists(guessedDestFile))
                             {
-                                destVolumeObjectTO.format = srcTemplateObjectTO.format;
+                                logger.Info("Deleting existing file " + guessedDestFile);
+                                File.Delete(guessedDestFile);
                             }
+
+                            destVolumeObjectTO.format = srcTemplateObjectTO.format;
                             destFile = destVolumeObjectTO.FullFileName;
-                            string srcFile = srcTemplateObjectTO.FullFileName;
+                            if (File.Exists(destFile))
+                            {
+                                logger.Info("Deleting existing file " + destFile);
+                                File.Delete(destFile);
+                            }
 
+                            string srcFile = srcTemplateObjectTO.FullFileName;
                             if (!File.Exists(srcFile))
                             {
                                 details = "Local template file missing from " + srcFile;
                             }
                             else
                             {
-                                if (File.Exists(destFile))
-                                {
-                                    logger.Info("Deleting existing file " + destFile);
-                                    File.Delete(destFile);
-                                }
-
                                 // TODO: thin provision instead of copying the full file.
                                 File.Copy(srcFile, destFile);
                                 newData = cmd.destTO;
@@ -1377,7 +1388,7 @@ namespace HypervResource
             {
                 return true;
             }
-            return true;
+            return false;
         }
 
         /// <summary>