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:
frank 2011-10-03 11:21:34 -07:00
parent 3947c9a126
commit 683113cc38
13 changed files with 104 additions and 99 deletions

View File

@ -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);

View File

@ -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();

View File

@ -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();

View File

@ -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 ) {

View File

@ -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()) {

View File

@ -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);
}

View File

@ -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();
}
}

View 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);
}

View File

@ -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;

View File

@ -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.");
}

View File

@ -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());

View File

@ -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());

View File

@ -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);