CLOUDSTACK-4757. Template copy - Copy all Datadisk templates that belong to the 
template along with the template.
Disallow individual copy of Datadisk templates


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

Branch: refs/heads/multiple-disk-ova
Commit: 6a3844155d405e750af0d7b74d43ffcbb5b8e605
Parents: 07d514f
Author: Likitha Shetty <likitha.she...@citrix.com>
Authored: Tue Apr 29 17:48:34 2014 +0530
Committer: Likitha Shetty <likitha.she...@citrix.com>
Committed: Fri May 2 17:52:12 2014 +0530

----------------------------------------------------------------------
 .../com/cloud/template/TemplateManagerImpl.java | 25 ++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6a384415/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 1268f24..8083be7 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -656,12 +656,33 @@ public class TemplateManagerImpl extends ManagerBase 
implements TemplateManager,
                     UsageEventUtils.publishUsageEvent(copyEventType, 
account.getId(), dstZoneId, tmpltId, null, null, null, 
srcTmpltStore.getPhysicalSize(),
                             srcTmpltStore.getSize(), 
template.getClass().getName(), template.getUuid());
                 }
-                return true;
+                // Copy every Datadisk template that belongs to the template 
to Destination zone
+                List<VMTemplateVO> dataDiskTemplates = 
_tmpltDao.listByParentTemplatetId(template.getId());
+                if (dataDiskTemplates != null && !dataDiskTemplates.isEmpty()) 
{
+                    for (VMTemplateVO dataDiskTemplate : dataDiskTemplates) {
+                        s_logger.debug("Copying " + dataDiskTemplates.size() + 
" for source template " + template.getId() + ". Copy all Datadisk templates to 
destination datastore " + dstSecStore.getName());
+                        TemplateInfo srcDataDiskTemplate = 
_tmplFactory.getTemplate(dataDiskTemplate.getId(), srcSecStore);
+                        AsyncCallFuture<TemplateApiResult> dataDiskCopyFuture 
= _tmpltSvr.copyTemplate(srcDataDiskTemplate, dstSecStore);
+                        try {
+                            TemplateApiResult dataDiskCopyResult = 
dataDiskCopyFuture.get();
+                            if (dataDiskCopyResult.isFailed()) {
+                                s_logger.error("Copy of datadisk template: " + 
srcDataDiskTemplate.getId() + " to image store: " + dstSecStore.getName()
+                                        + " failed with error: " + 
dataDiskCopyResult.getResult() + " , will try copying the next one");
+                                continue; // Continue to copy next Datadisk 
template
+                            }
+                            _tmpltDao.addTemplateToZone(dataDiskTemplate, 
dstZoneId);
+                            
_resourceLimitMgr.incrementResourceCount(dataDiskTemplate.getAccountId(), 
ResourceType.secondary_storage, dataDiskTemplate.getSize());
+                        } catch (Exception ex) {
+                            s_logger.error("Failed to copy datadisk template: 
" + srcDataDiskTemplate.getId() + " to image store: " + dstSecStore.getName()
+                                    + " , will try copying the next one");
+                        }
+                    }
+                }
             } catch (Exception ex) {
                 s_logger.debug("failed to copy template to image store:" + 
dstSecStore.getName() + " ,will try next one");
             }
         }
-        return false;
+        return true;
 
     }
 

Reply via email to