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; }