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 1a12b3dc074..e292a20e6d3 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 @@ -24,6 +24,7 @@ import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreState import com.cloud.storage.DataStoreRole; import com.cloud.storage.VMTemplateStorageResourceAssoc; +import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.utils.db.GenericDao; import com.cloud.utils.fsm.StateDao; @@ -50,6 +51,8 @@ public interface TemplateDataStoreDao extends GenericDao cacheStores = _storeMgr.getImageCacheStores(new ZoneScope(zoneId)); + if (cacheStores != null) { + for (DataStore store : cacheStores) { + List sRes = listByTemplateStoreDownloadStatus(templateId, store.getId(), + status); + if (sRes != null && sRes.size() > 0) { + Collections.shuffle(sRes); + return sRes.get(0); + } + } + } + return null; + } + @Override public TemplateDataStoreVO findByStoreTemplate(long storeId, long templateId) { SearchCriteria sc = storeTemplateSearch.create(); diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index f545d2c6fb5..ce178cd2e99 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -19,9 +19,9 @@ package com.cloud.template; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.HashMap; import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -136,7 +136,6 @@ import com.cloud.storage.StoragePoolHostVO; import com.cloud.storage.StoragePoolStatus; import com.cloud.storage.TemplateProfile; import com.cloud.storage.Upload; -import com.cloud.storage.VMTemplateDetailVO; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStoragePoolVO; import com.cloud.storage.VMTemplateStorageResourceAssoc; @@ -1697,7 +1696,12 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager, public Long getTemplateSize(long templateId, long zoneId) { TemplateDataStoreVO templateStoreRef = _tmplStoreDao.findByTemplateZoneDownloadStatus(templateId, zoneId, VMTemplateStorageResourceAssoc.Status.DOWNLOADED); if (templateStoreRef == null) { - throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + zoneId); + // check if it is ready on image cache stores + templateStoreRef = _tmplStoreDao.findByTemplateZoneStagingDownloadStatus(templateId, zoneId, + VMTemplateStorageResourceAssoc.Status.DOWNLOADED); + if (templateStoreRef == null) { + throw new CloudRuntimeException("Template " + templateId + " has not been completely downloaded to zone " + zoneId); + } } return templateStoreRef.getSize();