You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cloudstack.apache.org by "Logan B (JIRA)" <ji...@apache.org> on 2014/06/19 00:00:25 UTC

[jira] [Commented] (CLOUDSTACK-6938) Cannot create template from snapshot when using S3 storage

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

Logan B commented on CLOUDSTACK-6938:
-------------------------------------

This is the relevant bit of code:

In NfsSecondaryStorageResource.java:

if (!downloadDirectory.mkdirs()) {
                final String errMsg = "Unable to create directory " + downloadPath + " to copy from S3 to cache.";
                s_logger.error(errMsg);
                return new CopyCmdAnswer(errMsg);
            } else {
                s_logger.debug("Directory " + downloadPath + " already exists");
            }

I believe mkdirs() returns false if the directory already exists.  So this failure logic is prone to breaking.

Better logic might be:

if (downloadDirectory.exists()) {
              s_logger.debug("Directory " + downloadPath + " already exists");
            } else {
                 if (!downloadDirectory.mkdirs()) {
                       final String errMsg = "Unable to create directory " + downloadPath + " to copy from S3 to cache.";
                        s_logger.error(errMsg);
                        return new CopyCmdAnswer(errMsg);
             }

I'm not a programmer, but it seems that checking for the existing path before blindly failing would be better here.  If this code checks out I'll try to figure out how to offer a commit for cherry picking.

> Cannot create template from snapshot when using S3 storage
> ----------------------------------------------------------
>
>                 Key: CLOUDSTACK-6938
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-6938
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the default.) 
>          Components: Snapshot
>    Affects Versions: 4.4.0
>         Environment: KVM + S3 Secondary Storage
>            Reporter: Logan B
>            Priority: Blocker
>             Fix For: 4.4.0
>
>
> When trying to create a template from a snapshot with S3 secondary storage, the command immediately fails with a NullPointerException.
> This appears to only happen when there is a pre-existing snapshot folder in the NFS staging store.  This indicates that there is something wrong with the copy command (e.g., it's using 'mkdir' instead of 'mkdir -p').
> The issue can be worked around by deleting the existing snapshot folder on the staging store every time you want to create a new template.  This is obviously not viable for end users.
> This issue should be fixed before 4.4 ships because it should be a stupid simple thing to correct, but completely breaks restoring snapshots for end users.  Waiting for 4.5 would be far too long for an issue like this.
> 2014-06-18 21:13:54,789 DEBUG [cloud.agent.Agent] (agentRequest-Handler-2:null) Processing command: org.apache.cloudstack.storage.command.CopyCommand
> 2014-06-18 21:13:54,789 INFO  [storage.resource.NfsSecondaryStorageResource] (agentRequest-Handler-2:null) Determined host 172.16.48.99 corresponds to IP 172.16.48.99
> 2014-06-18 21:13:54,797 ERROR [storage.resource.NfsSecondaryStorageResource] (agentRequest-Handler-2:null) Unable to create directory /mnt/SecStorage/6b9bdec9-fdc9-3fdd-a5f8-0481df177ae8/snapshots/2/25 to copy from S3 to cache.
> I'm guessing it's an issue with the mkdirs() function in the code, but I've been unable to find it.



--
This message was sent by Atlassian JIRA
(v6.2#6252)