diff --git a/server/src/com/cloud/storage/dao/VMTemplateHostDao.java b/server/src/com/cloud/storage/dao/VMTemplateHostDao.java index ef8812d58a0..cefe359cff0 100755 --- a/server/src/com/cloud/storage/dao/VMTemplateHostDao.java +++ b/server/src/com/cloud/storage/dao/VMTemplateHostDao.java @@ -55,5 +55,7 @@ public interface VMTemplateHostDao extends GenericDao { List listDestroyed(long hostId); boolean templateAvailable(long templateId, long hostId); + + List listByZoneTemplate(long dcId, long templateId); } diff --git a/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java b/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java index 1bd94834282..a9387fc1c0c 100755 --- a/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java +++ b/server/src/com/cloud/storage/dao/VMTemplateHostDaoImpl.java @@ -29,7 +29,6 @@ import java.util.TimeZone; import javax.ejb.Local; import org.apache.log4j.Logger; - import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.utils.DateUtil; @@ -39,7 +38,7 @@ import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.Transaction; @Local(value={VMTemplateHostDao.class}) -public class VMTemplateHostDaoImpl extends GenericDaoBase implements VMTemplateHostDao { +public class VMTemplateHostDaoImpl extends GenericDaoBase implements VMTemplateHostDao { public static final Logger s_logger = Logger.getLogger(VMTemplateHostDaoImpl.class.getName()); protected final SearchBuilder HostSearch; @@ -50,7 +49,7 @@ public class VMTemplateHostDaoImpl extends GenericDaoBase HostTemplatePoolSearch; protected final SearchBuilder TemplateStatusSearch; protected final SearchBuilder TemplateStatesSearch; - + protected static final String UPDATE_TEMPLATE_HOST_REF = "UPDATE type_host_ref SET download_state = ?, download_pct= ?, last_updated = ? " @@ -72,8 +71,12 @@ public class VMTemplateHostDaoImpl extends GenericDaoBase listByOnlyTemplateId(long templateId) { SearchCriteria sc = TemplateSearch.create(); @@ -166,8 +170,8 @@ public class VMTemplateHostDaoImpl extends GenericDaoBase listByTemplateStatus(long templateId, VMTemplateHostVO.Status downloadState) { SearchCriteria sc = TemplateStatusSearch.create(); @@ -269,7 +273,29 @@ public class VMTemplateHostDaoImpl extends GenericDaoBase listByZoneTemplate(long dcId, long templateId) { + Transaction txn = Transaction.currentTxn(); + PreparedStatement pstmt = null; + List result = new ArrayList(); + try { + String sql = ZONE_TEMPLATE_SEARCH; + pstmt = txn.prepareStatement(sql); + + pstmt.setLong(1, dcId); + pstmt.setLong(2, templateId); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + result.add(toEntityBean(rs, false)); + } + + } catch (Exception e) { + s_logger.warn("Exception: ", e); + } + return result; + } + @Override public List listByTemplatePool(long templateId, long poolId) { SearchCriteria sc = PoolTemplateSearch.create(); diff --git a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java index f1f6434729d..7d4cdd07f35 100755 --- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java +++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java @@ -20,6 +20,7 @@ package com.cloud.storage.download; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -525,6 +526,25 @@ public class DownloadMonitorImpl implements DownloadMonitor { return null; } + + private List listAllInZone(long dcId){ + List tmplts = _templateDao.listAllInZone(dcId); + Iterator iter = tmplts.iterator(); + while ( iter.hasNext() ) { + VMTemplateVO tmplt = iter.next(); + if( tmplt.isPublicTemplate() || tmplt.isFeatured() ) { + continue; + } + List tmpltHosts = _vmTemplateHostDao.listByZoneTemplate(dcId, tmplt.getId()); + for ( VMTemplateHostVO tmpltHost : tmpltHosts ) { + if ( tmpltHost.getDownloadState() == Status.DOWNLOADED || tmpltHost.getDownloadState() == Status.DOWNLOAD_IN_PROGRESS) { + iter.remove(); + continue; + } + } + } + return tmplts; + } @Override public void handleTemplateSync(HostVO ssHost) { @@ -544,7 +564,7 @@ public class DownloadMonitorImpl implements DownloadMonitor { long zoneId = ssHost.getDataCenterId(); Set toBeDownloaded = new HashSet(); - List allTemplates = _templateDao.listAllInZone(ssHost.getDataCenterId()); + List allTemplates = listAllInZone(ssHost.getDataCenterId()); List rtngTmplts = _templateDao.listAllSystemVMTemplates(); List defaultBuiltin = _templateDao.listDefaultBuiltinTemplates();