diff --git a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java index 77e88a9466e..f8e210ac326 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java @@ -66,7 +66,7 @@ public interface TemplateDataStoreDao extends GenericDao listByTemplate(long templateId); - List listByTemplateNotBypassed(long templateId); + List listByTemplateNotBypassed(long templateId, Long... storeIds); TemplateDataStoreVO findByTemplateZoneReady(long templateId, Long zoneId); diff --git a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java index ea53825eab0..8aa411412b3 100644 --- a/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java +++ b/engine/storage/src/main/java/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java @@ -99,6 +99,7 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase listByTemplateNotBypassed(long templateId) { + public List listByTemplateNotBypassed(long templateId, Long... storeIds) { SearchCriteria sc = templateSearch.create(); sc.setParameters("template_id", templateId); sc.setParameters("download_state", Status.BYPASSED); sc.setParameters("destroyed", false); + sc.setParameters("storeids", storeIds); return search(sc, null); } diff --git a/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java b/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java index db79b96800a..d80786352bf 100644 --- a/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java +++ b/server/src/main/java/com/cloud/api/query/dao/TemplateJoinDaoImpl.java @@ -156,7 +156,9 @@ public class TemplateJoinDaoImpl extends GenericDaoBaseWithTagInformation detailsView, ResponseView view, TemplateJoinVO template) { - List templatesInStore = _templateStoreDao.listByTemplateNotBypassed(template.getId()); + List storesInZone = dataStoreDao.listStoresByZoneId(template.getDataCenterId()); + Long[] storeIds = storesInZone.stream().map(ImageStoreVO::getId).toArray(Long[]::new); + List templatesInStore = _templateStoreDao.listByTemplateNotBypassed(template.getId(), storeIds); List> downloadProgressDetails = new ArrayList(); HashMap downloadDetailInImageStores = null; for (TemplateDataStoreVO templateInStore : templatesInStore) {