CLOUDSTACK-7155 Re-copying templates to other zones doesn't work
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/cab2b12d Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/cab2b12d Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/cab2b12d Branch: refs/heads/saml2 Commit: cab2b12d7d2a37bb4d8e157bd12dee3117d1e8f0 Parents: ffa4d73 Author: Bharat Kumar <bharat.ku...@citrix.com> Authored: Tue Aug 19 20:09:02 2014 +0530 Committer: root <r...@kk-dev47.lab.citrite.net> Committed: Thu Aug 21 09:50:54 2014 +0530 ---------------------------------------------------------------------- .../storage/datastore/db/TemplateDataStoreDao.java | 2 ++ .../storage/image/db/TemplateDataStoreDaoImpl.java | 10 ++++++++++ .../src/com/cloud/template/HypervisorTemplateAdapter.java | 5 +++++ server/src/com/cloud/template/TemplateManagerImpl.java | 3 +++ 4 files changed, 20 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cab2b12d/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java ---------------------------------------------------------------------- diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java index cb15949..13c4d31 100644 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java @@ -76,4 +76,6 @@ public interface TemplateDataStoreDao extends GenericDao<TemplateDataStoreVO, Lo void updateStoreRoleToCachce(long storeId); List<TemplateDataStoreVO> listTemplateDownloadUrls(); + + void removeByTemplateStore(long templateId, long imageStoreId); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cab2b12d/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java ---------------------------------------------------------------------- diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java index 50334f4..a5cf6f8 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java @@ -292,6 +292,16 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase<TemplateDataStoreVO } @Override + public void removeByTemplateStore(long templateId, long imageStoreId) { + SearchCriteria<TemplateDataStoreVO> sc = storeTemplateSearch.create(); + sc.setParameters("template_id", templateId); + sc.setParameters("store_id", imageStoreId); + sc.setParameters("destroyed", false); + expunge(sc); + + } + + @Override public TemplateDataStoreVO findByTemplateZoneDownloadStatus(long templateId, Long zoneId, Status... status) { // get all elgible image stores List<DataStore> imgStores = _storeMgr.getImageStoresByScope(new ZoneScope(zoneId)); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cab2b12d/server/src/com/cloud/template/HypervisorTemplateAdapter.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java index 72aaff5..42f4b55 100755 --- a/server/src/com/cloud/template/HypervisorTemplateAdapter.java +++ b/server/src/com/cloud/template/HypervisorTemplateAdapter.java @@ -27,6 +27,7 @@ import javax.inject.Inject; import org.apache.log4j.Logger; +import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao; import org.apache.cloudstack.api.command.user.iso.DeleteIsoCmd; import org.apache.cloudstack.api.command.user.iso.RegisterIsoCmd; import org.apache.cloudstack.api.command.user.template.DeleteTemplateCmd; @@ -83,6 +84,7 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase { @Inject AgentManager _agentMgr; + @Inject TemplateDataStoreDao templateDataStoreDao; @Inject DataStoreManager storeMgr; @Inject @@ -306,6 +308,9 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase { templateZoneDao.remove(templateZone.getId()); } } + //mark all the occurrences of this template in the given store as destroyed. + templateDataStoreDao.removeByTemplateStore(template.getId(), imageStore.getId()); + } catch (InterruptedException e) { s_logger.debug("delete template Failed", e); throw new CloudRuntimeException("delete template Failed", e); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cab2b12d/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 f5ad97f..9214459 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -648,6 +648,9 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager, if (dstTmpltStore != null && dstTmpltStore.getDownloadState() == Status.DOWNLOADED) { return true; // already downloaded on this image store } + if (dstTmpltStore != null && dstTmpltStore.getDownloadState() != Status.DOWNLOAD_IN_PROGRESS) { + _tmplStoreDao.removeByTemplateStore(tmpltId, dstSecStore.getId()); + } AsyncCallFuture<TemplateApiResult> future = _tmpltSvr.copyTemplate(srcTemplate, dstSecStore); try {