Repository: cloudstack
Updated Branches:
  refs/heads/master a72580def -> e1a993d37


CLOUDSTACK-7754: Templates source_template_id is null when it is created from 
Snapshot with its corresponding volume removed. Fix it by searching for volumes 
including removed. Also bring the logic of setting source template id to 
create() method than execute which was wrongly put in.


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

Branch: refs/heads/master
Commit: e1a993d37b1bf9be24edd46f6d3566826692f853
Parents: a72580d
Author: Nitin Mehta <nitin.me...@citrix.com>
Authored: Tue Oct 21 09:57:02 2014 -0700
Committer: Nitin Mehta <nitin.me...@citrix.com>
Committed: Tue Oct 21 09:57:02 2014 -0700

----------------------------------------------------------------------
 .../com/cloud/template/TemplateManagerImpl.java | 40 +++-----------------
 1 file changed, 6 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/e1a993d3/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java 
b/server/src/com/cloud/template/TemplateManagerImpl.java
index 615dcb9..880c003 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -1409,29 +1409,6 @@ public class TemplateManagerImpl extends ManagerBase 
implements TemplateManager,
                 }
 
                 privateTemplate = _tmpltDao.findById(templateId);
-                if (snapshotId != null) {
-                    //getting the parent volume
-                    long parentVolumeId = 
_snapshotDao.findById(snapshotId).getVolumeId();
-                    //Volume can be removed
-                    VolumeVO parentVolume = 
_volumeDao.findByIdIncludingRemoved(parentVolumeId);
-
-                    if (parentVolume != null && parentVolume.getIsoId() != 
null && parentVolume.getIsoId() != 0) {
-                        
privateTemplate.setSourceTemplateId(parentVolume.getIsoId());
-                        _tmpltDao.update(privateTemplate.getId(), 
privateTemplate);
-                    } else if (parentVolume != null && 
parentVolume.getTemplateId() != null) {
-                        
privateTemplate.setSourceTemplateId(parentVolume.getTemplateId());
-                        _tmpltDao.update(privateTemplate.getId(), 
privateTemplate);
-                    }
-                } else if (volumeId != null) {
-                    VolumeVO parentVolume = _volumeDao.findById(volumeId);
-                    if (parentVolume.getIsoId() != null && 
parentVolume.getIsoId() != 0) {
-                        
privateTemplate.setSourceTemplateId(parentVolume.getIsoId());
-                        _tmpltDao.update(privateTemplate.getId(), 
privateTemplate);
-                    } else if (parentVolume.getTemplateId() != null) {
-                        
privateTemplate.setSourceTemplateId(parentVolume.getTemplateId());
-                        _tmpltDao.update(privateTemplate.getId(), 
privateTemplate);
-                    }
-                }
                 TemplateDataStoreVO srcTmpltStore = 
_tmplStoreDao.findByStoreTemplate(store.getId(), templateId);
                 UsageEventVO usageEvent =
                         new UsageEventVO(EventTypes.EVENT_TEMPLATE_CREATE, 
privateTemplate.getAccountId(), zoneId, privateTemplate.getId(), 
privateTemplate.getName(), null,
@@ -1565,8 +1542,8 @@ public class TemplateManagerImpl extends ManagerBase 
implements TemplateManager,
             if (snapshot == null) {
                 throw new InvalidParameterValueException("Failed to create 
private template record, unable to find snapshot " + snapshotId);
             }
-
-            volume = _volumeDao.findById(snapshot.getVolumeId());
+            // Volume could be removed so find including removed to record 
source template id.
+            volume = 
_volumeDao.findByIdIncludingRemoved(snapshot.getVolumeId());
 
             // check permissions
             _accountMgr.checkAccess(caller, null, true, snapshot);
@@ -1607,15 +1584,10 @@ public class TemplateManagerImpl extends ManagerBase 
implements TemplateManager,
         if (volume != null) {
             VMTemplateVO template = 
ApiDBUtils.findTemplateById(volume.getTemplateId());
             isExtractable = template != null && template.isExtractable() && 
template.getTemplateType() != Storage.TemplateType.SYSTEM;
-            if (template != null) {
-                sourceTemplateId = template.getId();
-            } else if (volume.getVolumeType() == Volume.Type.ROOT) { // vm
-                // created
-                // out
-                // of blank
-                // template
-                UserVm userVm = 
ApiDBUtils.findUserVmById(volume.getInstanceId());
-                sourceTemplateId = userVm.getIsoId();
+            if (volume.getIsoId() != null && volume.getIsoId() != 0) {
+                sourceTemplateId = volume.getIsoId();
+            } else if (volume.getTemplateId() != null) {
+                sourceTemplateId = volume.getTemplateId();
             }
         }
         String templateTag = cmd.getTemplateTag();

Reply via email to