mirror of https://github.com/apache/cloudstack.git
Bug 11522 - New agent manager
get rid of all secondary storage interface from HostDao, instead, put them in SecondaryStorageVmManager using SearchCriteria2 with decent name
This commit is contained in:
parent
3947c9a126
commit
683113cc38
|
|
@ -46,13 +46,7 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
|
|||
List<HostVO> listByResourceState(ResourceState...states);
|
||||
List<HostVO> listBy(Host.Type type, long dcId);
|
||||
List<HostVO> listAllBy(Host.Type type, long dcId);
|
||||
HostVO findSecondaryStorageHost(long dcId);
|
||||
List<HostVO> listByCluster(long clusterId);
|
||||
/**
|
||||
* Lists all secondary storage hosts, across all zones
|
||||
* @return list of Hosts
|
||||
*/
|
||||
List<HostVO> listSecondaryStorageHosts();
|
||||
|
||||
/**
|
||||
* Mark all hosts associated with a certain management server
|
||||
|
|
@ -127,8 +121,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
|
|||
List<HostVO> listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag);
|
||||
|
||||
long countRoutingHostsByDataCenter(long dcId);
|
||||
|
||||
List<HostVO> listSecondaryStorageHosts(long dataCenterId);
|
||||
|
||||
List<HostVO> listDirectHostsBy(long msId, Status status);
|
||||
|
||||
|
|
@ -138,12 +130,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
|
|||
|
||||
HostVO findTrafficMonitorHost();
|
||||
|
||||
List<HostVO> listLocalSecondaryStorageHosts();
|
||||
|
||||
List<HostVO> listLocalSecondaryStorageHosts(long dataCenterId);
|
||||
|
||||
List<HostVO> listAllSecondaryStorageHosts(long dataCenterId);
|
||||
|
||||
List<HostVO> listRoutingHostsByManagementServer(long msId);
|
||||
|
||||
List<HostVO> listSecondaryStorageVM(long dcId);
|
||||
|
|
|
|||
|
|
@ -320,61 +320,7 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
|
|||
List<HostVO> hosts = listBy(sc);
|
||||
return hosts.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public HostVO findSecondaryStorageHost(long dcId) {
|
||||
SearchCriteria<HostVO> sc = TypeDcSearch.create();
|
||||
sc.setParameters("type", Host.Type.SecondaryStorage);
|
||||
sc.setParameters("dc", dcId);
|
||||
List<HostVO> storageHosts = listBy(sc);
|
||||
if (storageHosts == null || storageHosts.size() < 1) {
|
||||
return null;
|
||||
} else {
|
||||
Collections.shuffle(storageHosts);
|
||||
return storageHosts.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listSecondaryStorageHosts() {
|
||||
SearchCriteria<HostVO> sc = createSearchCriteria();
|
||||
sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.SecondaryStorage);
|
||||
return search(sc, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listSecondaryStorageHosts(long dataCenterId) {
|
||||
SearchCriteria<HostVO> 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<HostVO> listLocalSecondaryStorageHosts() {
|
||||
SearchCriteria<HostVO> sc = createSearchCriteria();
|
||||
sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.LocalSecondaryStorage);
|
||||
return search(sc, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listLocalSecondaryStorageHosts(long dataCenterId) {
|
||||
SearchCriteria<HostVO> 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<HostVO> listAllSecondaryStorageHosts(long dataCenterId) {
|
||||
SearchCriteria<HostVO> 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<HostVO> findDirectlyConnectedHosts() {
|
||||
SearchCriteria<HostVO> sc = DirectlyConnectedSearch.create();
|
||||
|
|
|
|||
|
|
@ -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<HostVO> secStorageHosts = _hostDao.listSecondaryStorageHosts(dcId);
|
||||
List<HostVO> secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
|
||||
if(secStorageHosts.size() > 0)
|
||||
return secStorageHosts.get(0).getStorageUrl();
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Long, HostStats> _hostStats = new ConcurrentHashMap<Long, HostStats>();
|
||||
private final ConcurrentHashMap<Long, VmStats> _VmStats = new ConcurrentHashMap<Long, VmStats>();
|
||||
|
|
@ -111,7 +113,8 @@ public class StatsCollector {
|
|||
private StatsCollector(Map<String, String> 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<HostVO> hosts = _hostDao.listSecondaryStorageHosts();
|
||||
List<HostVO> hosts = _ssvmMgr.listSecondaryStorageHostsInAllZones();
|
||||
ConcurrentHashMap<Long, StorageStats> storageStats = new ConcurrentHashMap<Long, StorageStats>();
|
||||
for (HostVO host : hosts) {
|
||||
if ( host.getStorageUrl() == null ) {
|
||||
|
|
|
|||
|
|
@ -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<StoragePoolAllocator> _storagePoolAllocators;
|
||||
|
|
@ -965,7 +967,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
|
||||
@Override
|
||||
public HostVO getSecondaryStorageHost(long zoneId, long tmpltId) {
|
||||
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
|
||||
List<HostVO> 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<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
|
||||
List<HostVO> 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<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
|
||||
List<HostVO> 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<HostVO> getSecondaryStorageHosts(long zoneId) {
|
||||
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
|
||||
List<HostVO> hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId);
|
||||
if( hosts == null || hosts.size() == 0) {
|
||||
hosts = _hostDao.listLocalSecondaryStorageHosts(zoneId);
|
||||
hosts = _ssvmMgr.listLocalSecondaryStorageHostsInOneZone(zoneId);
|
||||
if (hosts.isEmpty()) {
|
||||
return new ArrayList<HostVO>();
|
||||
}
|
||||
|
|
@ -1973,7 +1975,7 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
|
|||
}
|
||||
|
||||
// Cleanup secondary storage hosts
|
||||
List<HostVO> secondaryStorageHosts = _hostDao.listSecondaryStorageHosts();
|
||||
List<HostVO> 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<HostVO> secHosts = _hostDao.listSecondaryStorageHosts(dcId);
|
||||
List<HostVO> secHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
|
||||
|
||||
//FIXME, for cloudzone, the local secondary storoge
|
||||
if (pool.isLocal() && pool.getPoolType() == StoragePoolType.Filesystem && secHosts.isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -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<HostVO> ssHosts = _hostDao.listAllSecondaryStorageHosts(dc.getId());
|
||||
List<HostVO> 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<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(dcId);
|
||||
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
|
||||
for ( HostVO ssHost : ssHosts ) {
|
||||
handleTemplateSync(ssHost);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(zoneId);
|
||||
List<HostVO> 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<String, Object> 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<String, String> 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<SecondaryStorageVmVO> 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<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(dataCenterId);
|
||||
List<HostVO> 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<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
|
||||
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage);
|
||||
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId);
|
||||
List<HostVO> storageHosts = sc.list();
|
||||
if (storageHosts == null || storageHosts.size() < 1) {
|
||||
return null;
|
||||
} else {
|
||||
Collections.shuffle(storageHosts);
|
||||
return storageHosts.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listSecondaryStorageHostsInAllZones() {
|
||||
SearchCriteria2<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
|
||||
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage);
|
||||
return sc.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId) {
|
||||
SearchCriteria2<HostVO, HostVO> 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<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId) {
|
||||
SearchCriteria2<HostVO, HostVO> 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<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId) {
|
||||
SearchCriteria2<HostVO, HostVO> 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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
9
server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java
Normal file → Executable file
9
server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java
Normal file → Executable file
|
|
@ -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<HostVO, SecondaryStorageVmVO> assignSecStorageVm(long zoneId, Command cmd);
|
||||
boolean generateSetupCommand(Long hostId);
|
||||
boolean deleteHost(Long hostId);
|
||||
boolean deleteHost(Long hostId);
|
||||
public HostVO findSecondaryStorageHost(long dcId);
|
||||
public List<HostVO> listSecondaryStorageHostsInAllZones();
|
||||
public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId);
|
||||
public List<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId);
|
||||
public List<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(dcId);
|
||||
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
|
||||
for ( HostVO ssHost : ssHosts ) {
|
||||
DeleteSnapshotsDirCommand cmd = new DeleteSnapshotsDirCommand(primaryStoragePoolNameLabel, ssHost.getStorageUrl(), dcId, accountId, volumeId, volume.getPath());
|
||||
Answer answer = null;
|
||||
|
|
|
|||
|
|
@ -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.");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<VMTemplateHostVO> 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<HostVO> dstSecHosts = _hostDao.listSecondaryStorageHosts(dstZone.getId());
|
||||
List<HostVO> 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());
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public class SearchCriteria2Test extends TestCase {
|
|||
|
||||
s_logger.debug("Test seraching host:");
|
||||
SearchCriteria2<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
|
||||
sc.and(sc.getEntity().getStatus(), Op.EQ, Status.Disconnected);
|
||||
sc.addAnd(sc.getEntity().getStatus(), Op.EQ, Status.Disconnected);
|
||||
List<HostVO> 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<VMInstanceVO, VMInstanceVO> 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<VMInstanceVO> vms = sc1.list();
|
||||
for (VMInstanceVO vm : vms) {
|
||||
s_logger.info("Vm name:" + vm.getInstanceName());
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public class SearchCriteria2<T, K> extends SearchCriteria<K> {
|
|||
return (SearchCriteria2<T, K>) 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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue