From cab2b12d7d2a37bb4d8e157bd12dee3117d1e8f0 Mon Sep 17 00:00:00 2001 From: Bharat Kumar Date: Tue, 19 Aug 2014 20:09:02 +0530 Subject: [PATCH] CLOUDSTACK-7155 Re-copying templates to other zones doesn't work --- .../storage/datastore/db/TemplateDataStoreDao.java | 2 ++ .../storage/image/db/TemplateDataStoreDaoImpl.java | 10 ++++++++++ .../com/cloud/template/HypervisorTemplateAdapter.java | 5 +++++ server/src/com/cloud/template/TemplateManagerImpl.java | 3 +++ 4 files changed, 20 insertions(+) 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 cb159499eb1..13c4d315da8 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 listTemplateDownloadUrls(); + + void removeByTemplateStore(long templateId, long imageStoreId); } 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 50334f46442..a5cf6f8e8cb 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 @@ -291,6 +291,16 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase 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 diff --git a/server/src/com/cloud/template/HypervisorTemplateAdapter.java b/server/src/com/cloud/template/HypervisorTemplateAdapter.java index 72aaff5ca29..42f4b554cae 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); diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index f5ad97f81a6..921445937e4 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 future = _tmpltSvr.copyTemplate(srcTemplate, dstSecStore); try {