From 683113cc38eaaf5ea41023a4e76e1f990aac08c8 Mon Sep 17 00:00:00 2001 From: frank Date: Mon, 3 Oct 2011 11:21:34 -0700 Subject: [PATCH] Bug 11522 - New agent manager get rid of all secondary storage interface from HostDao, instead, put them in SecondaryStorageVmManager using SearchCriteria2 with decent name --- server/src/com/cloud/host/dao/HostDao.java | 14 ----- .../src/com/cloud/host/dao/HostDaoImpl.java | 56 +---------------- .../hypervisor/vmware/VmwareManagerImpl.java | 4 +- .../src/com/cloud/server/StatsCollector.java | 9 ++- .../com/cloud/storage/StorageManagerImpl.java | 18 +++--- .../storage/download/DownloadMonitorImpl.java | 6 +- .../SecondaryStorageManagerImpl.java | 60 +++++++++++++++++-- .../secondary/SecondaryStorageVmManager.java | 9 ++- .../storage/snapshot/SnapshotManagerImpl.java | 5 +- .../template/HyervisorTemplateAdapter.java | 10 ++-- .../cloud/template/TemplateManagerImpl.java | 6 +- .../agent/manager/SearchCriteria2Test.java | 4 +- .../com/cloud/utils/db/SearchCriteria2.java | 2 +- 13 files changed, 104 insertions(+), 99 deletions(-) mode change 100644 => 100755 server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java diff --git a/server/src/com/cloud/host/dao/HostDao.java b/server/src/com/cloud/host/dao/HostDao.java index 707e88a8521..f2e632219bd 100755 --- a/server/src/com/cloud/host/dao/HostDao.java +++ b/server/src/com/cloud/host/dao/HostDao.java @@ -46,13 +46,7 @@ public interface HostDao extends GenericDao, StateDao listByResourceState(ResourceState...states); List listBy(Host.Type type, long dcId); List listAllBy(Host.Type type, long dcId); - HostVO findSecondaryStorageHost(long dcId); List listByCluster(long clusterId); - /** - * Lists all secondary storage hosts, across all zones - * @return list of Hosts - */ - List listSecondaryStorageHosts(); /** * Mark all hosts associated with a certain management server @@ -127,8 +121,6 @@ public interface HostDao extends GenericDao, StateDao listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag); long countRoutingHostsByDataCenter(long dcId); - - List listSecondaryStorageHosts(long dataCenterId); List listDirectHostsBy(long msId, Status status); @@ -138,12 +130,6 @@ public interface HostDao extends GenericDao, StateDao listLocalSecondaryStorageHosts(); - - List listLocalSecondaryStorageHosts(long dataCenterId); - - List listAllSecondaryStorageHosts(long dataCenterId); - List listRoutingHostsByManagementServer(long msId); List listSecondaryStorageVM(long dcId); diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java b/server/src/com/cloud/host/dao/HostDaoImpl.java index 0997e237eb7..3ff1fb1b329 100755 --- a/server/src/com/cloud/host/dao/HostDaoImpl.java +++ b/server/src/com/cloud/host/dao/HostDaoImpl.java @@ -320,61 +320,7 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao List hosts = listBy(sc); return hosts.size(); } - - @Override - public HostVO findSecondaryStorageHost(long dcId) { - SearchCriteria sc = TypeDcSearch.create(); - sc.setParameters("type", Host.Type.SecondaryStorage); - sc.setParameters("dc", dcId); - List storageHosts = listBy(sc); - if (storageHosts == null || storageHosts.size() < 1) { - return null; - } else { - Collections.shuffle(storageHosts); - return storageHosts.get(0); - } - } - - @Override - public List listSecondaryStorageHosts() { - SearchCriteria sc = createSearchCriteria(); - sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.SecondaryStorage); - return search(sc, null); - } - - @Override - public List listSecondaryStorageHosts(long dataCenterId) { - SearchCriteria sc = createSearchCriteria(); - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId); - sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.SecondaryStorage); - return search(sc, null); - - } - - @Override - public List listLocalSecondaryStorageHosts() { - SearchCriteria sc = createSearchCriteria(); - sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.LocalSecondaryStorage); - return search(sc, null); - } - - @Override - public List listLocalSecondaryStorageHosts(long dataCenterId) { - SearchCriteria sc = createSearchCriteria(); - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId); - sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.LocalSecondaryStorage); - return search(sc, null); - - } - - @Override - public List listAllSecondaryStorageHosts(long dataCenterId) { - SearchCriteria sc = createSearchCriteria(); - sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId); - sc.addAnd("type", SearchCriteria.Op.IN, new Object[]{Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage}); - return search(sc, null); - } - + @Override public List findDirectlyConnectedHosts() { SearchCriteria sc = DirectlyConnectedSearch.create(); diff --git a/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java b/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java index 511ce2e25ca..81ab664d322 100755 --- a/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java +++ b/server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java @@ -61,6 +61,7 @@ import com.cloud.org.Cluster.ClusterType; import com.cloud.secstorage.CommandExecLogDao; import com.cloud.serializer.GsonHelper; import com.cloud.storage.StorageLayer; +import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.utils.FileUtil; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; @@ -100,6 +101,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis @Inject ClusterManager _clusterMgr; @Inject CheckPointManager _checkPointMgr; @Inject VirtualNetworkApplianceManager _routerMgr; + @Inject SecondaryStorageVmManager _ssvmMgr; String _mountParent; StorageLayer _storage; @@ -420,7 +422,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis @Override public String getSecondaryStorageStoreUrl(long dcId) { - List secStorageHosts = _hostDao.listSecondaryStorageHosts(dcId); + List secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); if(secStorageHosts.size() > 0) return secStorageHosts.get(0).getStorageUrl(); diff --git a/server/src/com/cloud/server/StatsCollector.java b/server/src/com/cloud/server/StatsCollector.java index 9f429575d18..958f154bd5d 100755 --- a/server/src/com/cloud/server/StatsCollector.java +++ b/server/src/com/cloud/server/StatsCollector.java @@ -55,6 +55,7 @@ import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.StoragePoolHostDao; import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.utils.NumbersUtil; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.concurrency.NamedThreadFactory; @@ -83,7 +84,8 @@ public class StatsCollector { private final VolumeDao _volsDao; private final StoragePoolDao _storagePoolDao; private final StorageManager _storageManager; - private final StoragePoolHostDao _storagePoolHostDao; + private final StoragePoolHostDao _storagePoolHostDao; + private final SecondaryStorageVmManager _ssvmMgr; private ConcurrentHashMap _hostStats = new ConcurrentHashMap(); private final ConcurrentHashMap _VmStats = new ConcurrentHashMap(); @@ -111,7 +113,8 @@ public class StatsCollector { private StatsCollector(Map configs) { ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name); _agentMgr = locator.getManager(AgentManager.class); - _userVmMgr = locator.getManager(UserVmManager.class); + _userVmMgr = locator.getManager(UserVmManager.class); + _ssvmMgr = locator.getManager(SecondaryStorageVmManager.class); _hostDao = locator.getDao(HostDao.class); _userVmDao = locator.getDao(UserVmDao.class); _volsDao = locator.getDao(VolumeDao.class); @@ -265,7 +268,7 @@ public class StatsCollector { s_logger.debug("StorageCollector is running..."); } - List hosts = _hostDao.listSecondaryStorageHosts(); + List hosts = _ssvmMgr.listSecondaryStorageHostsInAllZones(); ConcurrentHashMap storageStats = new ConcurrentHashMap(); for (HostVO host : hosts) { if ( host.getStorageUrl() == null ) { diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index f1e0617e84a..9ffac334d44 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -287,6 +287,8 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag protected OCFS2Manager _ocfs2Mgr; @Inject protected ResourceLimitService _resourceLimitMgr; + @Inject + protected SecondaryStorageVmManager _ssvmMgr; @Inject(adapter = StoragePoolAllocator.class) protected Adapters _storagePoolAllocators; @@ -965,7 +967,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag @Override public HostVO getSecondaryStorageHost(long zoneId, long tmpltId) { - List hosts = _hostDao.listSecondaryStorageHosts(zoneId); + List hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId); if( hosts == null || hosts.size() == 0) { return null; } @@ -980,7 +982,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag @Override public VMTemplateHostVO getTemplateHostRef(long zoneId, long tmpltId, boolean readyOnly) { - List hosts = _hostDao.listSecondaryStorageHosts(zoneId); + List hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId); if( hosts == null || hosts.size() == 0) { return null; } @@ -1006,9 +1008,9 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag @Override public HostVO getSecondaryStorageHost(long zoneId) { - List hosts = _hostDao.listSecondaryStorageHosts(zoneId); + List hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId); if( hosts == null || hosts.size() == 0) { - hosts = _hostDao.listLocalSecondaryStorageHosts(zoneId); + hosts = _ssvmMgr.listLocalSecondaryStorageHostsInOneZone(zoneId); if (hosts.isEmpty()) { return null; } @@ -1022,9 +1024,9 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag @Override public List getSecondaryStorageHosts(long zoneId) { - List hosts = _hostDao.listSecondaryStorageHosts(zoneId); + List hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId); if( hosts == null || hosts.size() == 0) { - hosts = _hostDao.listLocalSecondaryStorageHosts(zoneId); + hosts = _ssvmMgr.listLocalSecondaryStorageHostsInOneZone(zoneId); if (hosts.isEmpty()) { return new ArrayList(); } @@ -1973,7 +1975,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag } // Cleanup secondary storage hosts - List secondaryStorageHosts = _hostDao.listSecondaryStorageHosts(); + List secondaryStorageHosts = _ssvmMgr.listSecondaryStorageHostsInAllZones(); for (HostVO secondaryStorageHost : secondaryStorageHosts) { try { long hostId = secondaryStorageHost.getId(); @@ -3025,7 +3027,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag long dcId = pool.getDataCenterId(); Long podId = pool.getPodId(); - List secHosts = _hostDao.listSecondaryStorageHosts(dcId); + List secHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); //FIXME, for cloudzone, the local secondary storoge if (pool.isLocal() && pool.getPoolType() == StoragePoolType.Filesystem && secHosts.isEmpty()) { diff --git a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java index 4b411c840c7..a837d5a4eb2 100755 --- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java +++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java @@ -104,6 +104,8 @@ public class DownloadMonitorImpl implements DownloadMonitor { SecondaryStorageVmDao _secStorageVmDao; @Inject AlertManager _alertMgr; + @Inject + SecondaryStorageVmManager _ssvmMgr; @Inject private final DataCenterDao _dcDao = null; @@ -361,7 +363,7 @@ public class DownloadMonitorImpl implements DownloadMonitor { long templateId = template.getId(); boolean isPublic = template.isFeatured() || template.isPublicTemplate(); for ( DataCenterVO dc : dcs ) { - List ssHosts = _hostDao.listAllSecondaryStorageHosts(dc.getId()); + List ssHosts = _ssvmMgr.listAllTypesSecondaryStorageHostsInOneZone(dc.getId()); for ( HostVO ssHost : ssHosts ) { if (isTemplateUpdateable(templateId, ssHost.getId())) { initiateTemplateDownload(templateId, ssHost); @@ -481,7 +483,7 @@ public class DownloadMonitorImpl implements DownloadMonitor { @Override public void handleTemplateSync(long dcId) { - List ssHosts = _hostDao.listSecondaryStorageHosts(dcId); + List ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); for ( HostVO ssHost : ssHosts ) { handleTemplateSync(ssHost); } diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java index 605d8918cf6..d815011b3f6 100755 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java @@ -19,6 +19,7 @@ package com.cloud.storage.secondary; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; @@ -98,6 +99,8 @@ import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.utils.db.GlobalLock; +import com.cloud.utils.db.SearchCriteria.Op; +import com.cloud.utils.db.SearchCriteria2; import com.cloud.utils.events.SubscriptionMgr; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.NetUtils; @@ -200,6 +203,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V UserVmDetailsDao _vmDetailsDao; @Inject protected ResourceManager _resourceMgr; + @Inject + protected SecondaryStorageVmManager _ssvmMgr; private long _capacityScanInterval = DEFAULT_CAPACITY_SCAN_INTERVAL; @@ -258,7 +263,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V return false; } - List ssHosts = _hostDao.listSecondaryStorageHosts(zoneId); + List ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId); for( HostVO ssHost : ssHosts ) { String secUrl = ssHost.getStorageUrl(); SecStorageSetupCommand setupCmd = new SecStorageSetupCommand(secUrl); @@ -489,7 +494,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } protected Map createSecStorageVmInstance(long dataCenterId, SecondaryStorageVm.Role role) { - HostVO secHost = _hostDao.findSecondaryStorageHost(dataCenterId); + HostVO secHost = findSecondaryStorageHost(dataCenterId); if (secHost == null) { String msg = "No secondary storage available in zone " + dataCenterId + ", cannot create secondary storage vm"; s_logger.warn(msg); @@ -675,7 +680,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V ZoneHostInfo zoneHostInfo = zoneHostInfoMap.get(dataCenterId); if (zoneHostInfo != null && (zoneHostInfo.getFlags() & RunningHostInfoAgregator.ZoneHostInfo.ROUTING_HOST_MASK) != 0) { VMTemplateVO template = _templateDao.findSystemVMTemplate(dataCenterId); - HostVO secHost = _hostDao.findSecondaryStorageHost(dataCenterId); + HostVO secHost = _ssvmMgr.findSecondaryStorageHost(dataCenterId); if (secHost == null) { if (s_logger.isDebugEnabled()) { s_logger.debug("No secondary storage available in zone " + dataCenterId + ", wait until it is ready to launch secondary storage vm"); @@ -960,7 +965,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V Map details = _vmDetailsDao.findDetails(vm.getId()); vm.setDetails(details); - HostVO secHost = _hostDao.findSecondaryStorageHost(dest.getDataCenter().getId()); + HostVO secHost = _ssvmMgr.findSecondaryStorageHost(dest.getDataCenter().getId()); assert (secHost != null); StringBuilder buf = profile.getBootArgsBuilder(); @@ -1169,7 +1174,7 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V List ssVms = _secStorageVmDao.getSecStorageVmListInStates(SecondaryStorageVm.Role.templateProcessor, dataCenterId, State.Running, State.Migrating, State.Starting, State.Stopped, State.Stopping ); int vmSize = (ssVms == null)? 0 : ssVms.size(); - List ssHosts = _hostDao.listSecondaryStorageHosts(dataCenterId); + List ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dataCenterId); int hostSize = (ssHosts == null)? 0 : ssHosts.size(); if ( hostSize > vmSize ) { s_logger.info("No secondary storage vms found in datacenter id=" + dataCenterId + ", starting a new one"); @@ -1260,4 +1265,49 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V } return null; } + + @Override + public HostVO findSecondaryStorageHost(long dcId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId); + List storageHosts = sc.list(); + if (storageHosts == null || storageHosts.size() < 1) { + return null; + } else { + Collections.shuffle(storageHosts); + return storageHosts.get(0); + } + } + + @Override + public List listSecondaryStorageHostsInAllZones() { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage); + return sc.list(); + } + + @Override + public List listSecondaryStorageHostsInOneZone(long dataCenterId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage); + return sc.list(); + } + + @Override + public List listLocalSecondaryStorageHostsInOneZone(long dataCenterId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId); + sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.LocalSecondaryStorage); + return sc.list(); + } + + @Override + public List listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId) { + SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); + sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId); + sc.addAnd(sc.getEntity().getType(), Op.IN, Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage); + return sc.list(); + } } diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java b/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java old mode 100644 new mode 100755 index 891a73a23fa..00df0c23937 --- a/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java +++ b/server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java @@ -17,6 +17,8 @@ */ package com.cloud.storage.secondary; +import java.util.List; + import com.cloud.agent.api.Command; import com.cloud.agent.api.StartupCommand; import com.cloud.host.HostVO; @@ -44,5 +46,10 @@ public interface SecondaryStorageVmManager extends Manager { public Pair assignSecStorageVm(long zoneId, Command cmd); boolean generateSetupCommand(Long hostId); - boolean deleteHost(Long hostId); + boolean deleteHost(Long hostId); + public HostVO findSecondaryStorageHost(long dcId); + public List listSecondaryStorageHostsInAllZones(); + public List listSecondaryStorageHostsInOneZone(long dataCenterId); + public List listLocalSecondaryStorageHostsInOneZone(long dataCenterId); + public List listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId); } diff --git a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java index aaa637fbc09..2b41f7d596b 100755 --- a/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java +++ b/server/src/com/cloud/storage/snapshot/SnapshotManagerImpl.java @@ -89,6 +89,7 @@ import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.SwiftDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; +import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.AccountVO; @@ -167,6 +168,8 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma private ResourceLimitService _resourceLimitMgr; @Inject private SwiftDao _swiftDao; + @Inject + private SecondaryStorageVmManager _ssvmMgr; String _name; private int _totalRetries; private int _pauseInterval; @@ -976,7 +979,7 @@ public class SnapshotManagerImpl implements SnapshotManager, SnapshotService, Ma continue; } - List ssHosts = _hostDao.listSecondaryStorageHosts(dcId); + List ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId); for ( HostVO ssHost : ssHosts ) { DeleteSnapshotsDirCommand cmd = new DeleteSnapshotsDirCommand(primaryStoragePoolNameLabel, ssHost.getStorageUrl(), dcId, accountId, volumeId, volume.getPath()); Answer answer = null; diff --git a/server/src/com/cloud/template/HyervisorTemplateAdapter.java b/server/src/com/cloud/template/HyervisorTemplateAdapter.java index da7de2005ea..4f09f412b93 100755 --- a/server/src/com/cloud/template/HyervisorTemplateAdapter.java +++ b/server/src/com/cloud/template/HyervisorTemplateAdapter.java @@ -29,6 +29,7 @@ import com.cloud.storage.VMTemplateStorageResourceAssoc.Status; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateZoneVO; import com.cloud.storage.download.DownloadMonitor; +import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.user.Account; import com.cloud.utils.component.Inject; import com.cloud.utils.db.DB; @@ -38,6 +39,7 @@ import com.cloud.utils.exception.CloudRuntimeException; public class HyervisorTemplateAdapter extends TemplateAdapterBase implements TemplateAdapter { private final static Logger s_logger = Logger.getLogger(HyervisorTemplateAdapter.class); @Inject DownloadMonitor _downloadMonitor; + @Inject SecondaryStorageVmManager _ssvmMgr; private String validateUrl(String url) { try { @@ -133,10 +135,10 @@ public class HyervisorTemplateAdapter extends TemplateAdapterBase implements Tem if (!template.isCrossZones() && zoneId != null) { DataCenterVO zone = _dcDao.findById(zoneId); zoneName = zone.getName(); - secondaryStorageHosts = _hostDao.listSecondaryStorageHosts(zoneId); + secondaryStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId); } else { zoneName = "(all zones)"; - secondaryStorageHosts = _hostDao.listSecondaryStorageHosts(); + secondaryStorageHosts = _ssvmMgr.listSecondaryStorageHostsInAllZones(); } s_logger.debug("Attempting to mark template host refs for template: " + template.getName() + " as destroyed in zone: " + zoneName); @@ -237,7 +239,7 @@ public class HyervisorTemplateAdapter extends TemplateAdapterBase implements Tem throw new InvalidParameterValueException("The DomR template cannot be deleted."); } - if (zoneId != null && (_hostDao.findSecondaryStorageHost(zoneId) == null)) { + if (zoneId != null && (_ssvmMgr.findSecondaryStorageHost(zoneId) == null)) { throw new InvalidParameterValueException("Failed to find a secondary storage host in the specified zone."); } @@ -248,7 +250,7 @@ public class HyervisorTemplateAdapter extends TemplateAdapterBase implements Tem TemplateProfile profile = super.prepareDelete(cmd); Long zoneId = profile.getZoneId(); - if (zoneId != null && (_hostDao.findSecondaryStorageHost(zoneId) == null)) { + if (zoneId != null && (_ssvmMgr.findSecondaryStorageHost(zoneId) == null)) { throw new InvalidParameterValueException("Failed to find a secondary storage host in the specified zone."); } diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index 1a2e3867da3..215b88bc968 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -100,6 +100,7 @@ import com.cloud.storage.dao.VMTemplatePoolDao; import com.cloud.storage.dao.VMTemplateZoneDao; import com.cloud.storage.dao.VolumeDao; import com.cloud.storage.download.DownloadMonitor; +import com.cloud.storage.secondary.SecondaryStorageVmManager; import com.cloud.storage.upload.UploadMonitor; import com.cloud.template.TemplateAdapter.TemplateAdapterType; import com.cloud.user.Account; @@ -166,6 +167,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe @Inject HypervisorGuruManager _hvGuruMgr; @Inject AccountService _accountService; @Inject ResourceLimitService _resourceLimitMgr; + @Inject SecondaryStorageVmManager _ssvmMgr; int _primaryStorageDownloadWait; protected SearchBuilder HostTemplateStatesSearch; @@ -518,7 +520,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe @Override @DB public boolean copy(long userId, VMTemplateVO template, HostVO srcSecHost, DataCenterVO srcZone, DataCenterVO dstZone) throws StorageUnavailableException, ResourceAllocationException { - List dstSecHosts = _hostDao.listSecondaryStorageHosts(dstZone.getId()); + List dstSecHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dstZone.getId()); long tmpltId = template.getId(); long dstZoneId = dstZone.getId(); if (dstSecHosts == null || dstSecHosts.isEmpty() ) { @@ -913,7 +915,7 @@ public class TemplateManagerImpl implements TemplateManager, Manager, TemplateSe throw new InvalidParameterValueException("Please specify a valid iso."); } - if (zoneId != null && (_hostDao.findSecondaryStorageHost(zoneId) == null)) { + if (zoneId != null && (_ssvmMgr.findSecondaryStorageHost(zoneId) == null)) { throw new InvalidParameterValueException("Failed to find a secondary storage host in the specified zone."); } TemplateAdapter adapter = getAdapter(template.getHypervisorType()); diff --git a/server/test/com/cloud/agent/manager/SearchCriteria2Test.java b/server/test/com/cloud/agent/manager/SearchCriteria2Test.java index 07e3795d8b0..c3e455229a8 100755 --- a/server/test/com/cloud/agent/manager/SearchCriteria2Test.java +++ b/server/test/com/cloud/agent/manager/SearchCriteria2Test.java @@ -45,7 +45,7 @@ public class SearchCriteria2Test extends TestCase { s_logger.debug("Test seraching host:"); SearchCriteria2 sc = SearchCriteria2.create(HostVO.class); - sc.and(sc.getEntity().getStatus(), Op.EQ, Status.Disconnected); + sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Disconnected); List ups = sc.list(); for (HostVO vo : ups) { s_logger.info("Host id: " + vo.getId() + " is Disconnected"); @@ -53,7 +53,7 @@ public class SearchCriteria2Test extends TestCase { SearchCriteria2 sc1 = SearchCriteria2.create(VMInstanceVO.class); - sc1.and(sc1.getEntity().getState(), Op.EQ, VirtualMachine.State.Running); + sc1.addAnd(sc1.getEntity().getState(), Op.EQ, VirtualMachine.State.Running); List vms = sc1.list(); for (VMInstanceVO vm : vms) { s_logger.info("Vm name:" + vm.getInstanceName()); diff --git a/utils/src/com/cloud/utils/db/SearchCriteria2.java b/utils/src/com/cloud/utils/db/SearchCriteria2.java index 27c207ccb96..77253a4eeee 100755 --- a/utils/src/com/cloud/utils/db/SearchCriteria2.java +++ b/utils/src/com/cloud/utils/db/SearchCriteria2.java @@ -22,7 +22,7 @@ public class SearchCriteria2 extends SearchCriteria { return (SearchCriteria2) sc; } - public void and(Object useless, Op op, Object...values) { + public void addAnd(Object useless, Op op, Object...values) { String uuid = UUID.randomUUID().toString(); _sb.and(uuid, null, op); this.setParameters(uuid, values);