Skip to content

Commit 683113c

Browse files
committed
Bug 11522 - New agent manager
get rid of all secondary storage interface from HostDao, instead, put them in SecondaryStorageVmManager using SearchCriteria2 with decent name
1 parent 3947c9a commit 683113c

13 files changed

Lines changed: 104 additions & 99 deletions

File tree

server/src/com/cloud/host/dao/HostDao.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,7 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
4646
List<HostVO> listByResourceState(ResourceState...states);
4747
List<HostVO> listBy(Host.Type type, long dcId);
4848
List<HostVO> listAllBy(Host.Type type, long dcId);
49-
HostVO findSecondaryStorageHost(long dcId);
5049
List<HostVO> listByCluster(long clusterId);
51-
/**
52-
* Lists all secondary storage hosts, across all zones
53-
* @return list of Hosts
54-
*/
55-
List<HostVO> listSecondaryStorageHosts();
5650

5751
/**
5852
* Mark all hosts associated with a certain management server
@@ -127,8 +121,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
127121
List<HostVO> listByHostTag(Host.Type type, Long clusterId, Long podId, long dcId, String hostTag);
128122

129123
long countRoutingHostsByDataCenter(long dcId);
130-
131-
List<HostVO> listSecondaryStorageHosts(long dataCenterId);
132124

133125
List<HostVO> listDirectHostsBy(long msId, Status status);
134126

@@ -138,12 +130,6 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
138130

139131
HostVO findTrafficMonitorHost();
140132

141-
List<HostVO> listLocalSecondaryStorageHosts();
142-
143-
List<HostVO> listLocalSecondaryStorageHosts(long dataCenterId);
144-
145-
List<HostVO> listAllSecondaryStorageHosts(long dataCenterId);
146-
147133
List<HostVO> listRoutingHostsByManagementServer(long msId);
148134

149135
List<HostVO> listSecondaryStorageVM(long dcId);

server/src/com/cloud/host/dao/HostDaoImpl.java

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -320,61 +320,7 @@ public long countBy(long clusterId, ResourceState... states) {
320320
List<HostVO> hosts = listBy(sc);
321321
return hosts.size();
322322
}
323-
324-
@Override
325-
public HostVO findSecondaryStorageHost(long dcId) {
326-
SearchCriteria<HostVO> sc = TypeDcSearch.create();
327-
sc.setParameters("type", Host.Type.SecondaryStorage);
328-
sc.setParameters("dc", dcId);
329-
List<HostVO> storageHosts = listBy(sc);
330-
if (storageHosts == null || storageHosts.size() < 1) {
331-
return null;
332-
} else {
333-
Collections.shuffle(storageHosts);
334-
return storageHosts.get(0);
335-
}
336-
}
337-
338-
@Override
339-
public List<HostVO> listSecondaryStorageHosts() {
340-
SearchCriteria<HostVO> sc = createSearchCriteria();
341-
sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.SecondaryStorage);
342-
return search(sc, null);
343-
}
344-
345-
@Override
346-
public List<HostVO> listSecondaryStorageHosts(long dataCenterId) {
347-
SearchCriteria<HostVO> sc = createSearchCriteria();
348-
sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId);
349-
sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.SecondaryStorage);
350-
return search(sc, null);
351-
352-
}
353-
354-
@Override
355-
public List<HostVO> listLocalSecondaryStorageHosts() {
356-
SearchCriteria<HostVO> sc = createSearchCriteria();
357-
sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.LocalSecondaryStorage);
358-
return search(sc, null);
359-
}
360-
361-
@Override
362-
public List<HostVO> listLocalSecondaryStorageHosts(long dataCenterId) {
363-
SearchCriteria<HostVO> sc = createSearchCriteria();
364-
sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId);
365-
sc.addAnd("type", SearchCriteria.Op.EQ, Host.Type.LocalSecondaryStorage);
366-
return search(sc, null);
367-
368-
}
369-
370-
@Override
371-
public List<HostVO> listAllSecondaryStorageHosts(long dataCenterId) {
372-
SearchCriteria<HostVO> sc = createSearchCriteria();
373-
sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId);
374-
sc.addAnd("type", SearchCriteria.Op.IN, new Object[]{Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage});
375-
return search(sc, null);
376-
}
377-
323+
378324
@Override
379325
public List<HostVO> findDirectlyConnectedHosts() {
380326
SearchCriteria<HostVO> sc = DirectlyConnectedSearch.create();

server/src/com/cloud/hypervisor/vmware/VmwareManagerImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import com.cloud.secstorage.CommandExecLogDao;
6262
import com.cloud.serializer.GsonHelper;
6363
import com.cloud.storage.StorageLayer;
64+
import com.cloud.storage.secondary.SecondaryStorageVmManager;
6465
import com.cloud.utils.FileUtil;
6566
import com.cloud.utils.NumbersUtil;
6667
import com.cloud.utils.Pair;
@@ -100,6 +101,7 @@ public class VmwareManagerImpl implements VmwareManager, VmwareStorageMount, Lis
100101
@Inject ClusterManager _clusterMgr;
101102
@Inject CheckPointManager _checkPointMgr;
102103
@Inject VirtualNetworkApplianceManager _routerMgr;
104+
@Inject SecondaryStorageVmManager _ssvmMgr;
103105

104106
String _mountParent;
105107
StorageLayer _storage;
@@ -420,7 +422,7 @@ private ManagedObjectReference addHostToVCenterCluster(VmwareContext serviceCont
420422

421423
@Override
422424
public String getSecondaryStorageStoreUrl(long dcId) {
423-
List<HostVO> secStorageHosts = _hostDao.listSecondaryStorageHosts(dcId);
425+
List<HostVO> secStorageHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
424426
if(secStorageHosts.size() > 0)
425427
return secStorageHosts.get(0).getStorageUrl();
426428

server/src/com/cloud/server/StatsCollector.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.cloud.storage.dao.StoragePoolDao;
5656
import com.cloud.storage.dao.StoragePoolHostDao;
5757
import com.cloud.storage.dao.VolumeDao;
58+
import com.cloud.storage.secondary.SecondaryStorageVmManager;
5859
import com.cloud.utils.NumbersUtil;
5960
import com.cloud.utils.component.ComponentLocator;
6061
import com.cloud.utils.concurrency.NamedThreadFactory;
@@ -83,7 +84,8 @@ public class StatsCollector {
8384
private final VolumeDao _volsDao;
8485
private final StoragePoolDao _storagePoolDao;
8586
private final StorageManager _storageManager;
86-
private final StoragePoolHostDao _storagePoolHostDao;
87+
private final StoragePoolHostDao _storagePoolHostDao;
88+
private final SecondaryStorageVmManager _ssvmMgr;
8789

8890
private ConcurrentHashMap<Long, HostStats> _hostStats = new ConcurrentHashMap<Long, HostStats>();
8991
private final ConcurrentHashMap<Long, VmStats> _VmStats = new ConcurrentHashMap<Long, VmStats>();
@@ -111,7 +113,8 @@ public static StatsCollector getInstance(Map<String, String> configs) {
111113
private StatsCollector(Map<String, String> configs) {
112114
ComponentLocator locator = ComponentLocator.getLocator(ManagementServer.Name);
113115
_agentMgr = locator.getManager(AgentManager.class);
114-
_userVmMgr = locator.getManager(UserVmManager.class);
116+
_userVmMgr = locator.getManager(UserVmManager.class);
117+
_ssvmMgr = locator.getManager(SecondaryStorageVmManager.class);
115118
_hostDao = locator.getDao(HostDao.class);
116119
_userVmDao = locator.getDao(UserVmDao.class);
117120
_volsDao = locator.getDao(VolumeDao.class);
@@ -265,7 +268,7 @@ public void run() {
265268
s_logger.debug("StorageCollector is running...");
266269
}
267270

268-
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts();
271+
List<HostVO> hosts = _ssvmMgr.listSecondaryStorageHostsInAllZones();
269272
ConcurrentHashMap<Long, StorageStats> storageStats = new ConcurrentHashMap<Long, StorageStats>();
270273
for (HostVO host : hosts) {
271274
if ( host.getStorageUrl() == null ) {

server/src/com/cloud/storage/StorageManagerImpl.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,8 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag
287287
protected OCFS2Manager _ocfs2Mgr;
288288
@Inject
289289
protected ResourceLimitService _resourceLimitMgr;
290+
@Inject
291+
protected SecondaryStorageVmManager _ssvmMgr;
290292

291293
@Inject(adapter = StoragePoolAllocator.class)
292294
protected Adapters<StoragePoolAllocator> _storagePoolAllocators;
@@ -965,7 +967,7 @@ public String getSecondaryStorageURL(long zoneId) {
965967

966968
@Override
967969
public HostVO getSecondaryStorageHost(long zoneId, long tmpltId) {
968-
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
970+
List<HostVO> hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId);
969971
if( hosts == null || hosts.size() == 0) {
970972
return null;
971973
}
@@ -980,7 +982,7 @@ public HostVO getSecondaryStorageHost(long zoneId, long tmpltId) {
980982

981983
@Override
982984
public VMTemplateHostVO getTemplateHostRef(long zoneId, long tmpltId, boolean readyOnly) {
983-
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
985+
List<HostVO> hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId);
984986
if( hosts == null || hosts.size() == 0) {
985987
return null;
986988
}
@@ -1006,9 +1008,9 @@ public VMTemplateHostVO getTemplateHostRef(long zoneId, long tmpltId, boolean re
10061008

10071009
@Override
10081010
public HostVO getSecondaryStorageHost(long zoneId) {
1009-
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
1011+
List<HostVO> hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId);
10101012
if( hosts == null || hosts.size() == 0) {
1011-
hosts = _hostDao.listLocalSecondaryStorageHosts(zoneId);
1013+
hosts = _ssvmMgr.listLocalSecondaryStorageHostsInOneZone(zoneId);
10121014
if (hosts.isEmpty()) {
10131015
return null;
10141016
}
@@ -1022,9 +1024,9 @@ public HostVO getSecondaryStorageHost(long zoneId) {
10221024

10231025
@Override
10241026
public List<HostVO> getSecondaryStorageHosts(long zoneId) {
1025-
List<HostVO> hosts = _hostDao.listSecondaryStorageHosts(zoneId);
1027+
List<HostVO> hosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId);
10261028
if( hosts == null || hosts.size() == 0) {
1027-
hosts = _hostDao.listLocalSecondaryStorageHosts(zoneId);
1029+
hosts = _ssvmMgr.listLocalSecondaryStorageHostsInOneZone(zoneId);
10281030
if (hosts.isEmpty()) {
10291031
return new ArrayList<HostVO>();
10301032
}
@@ -1973,7 +1975,7 @@ public void cleanupStorage(boolean recurring) {
19731975
}
19741976

19751977
// Cleanup secondary storage hosts
1976-
List<HostVO> secondaryStorageHosts = _hostDao.listSecondaryStorageHosts();
1978+
List<HostVO> secondaryStorageHosts = _ssvmMgr.listSecondaryStorageHostsInAllZones();
19771979
for (HostVO secondaryStorageHost : secondaryStorageHosts) {
19781980
try {
19791981
long hostId = secondaryStorageHost.getId();
@@ -3025,7 +3027,7 @@ public VMTemplateHostVO findVmTemplateHost(long templateId, StoragePool pool) {
30253027
long dcId = pool.getDataCenterId();
30263028
Long podId = pool.getPodId();
30273029

3028-
List<HostVO> secHosts = _hostDao.listSecondaryStorageHosts(dcId);
3030+
List<HostVO> secHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
30293031

30303032
//FIXME, for cloudzone, the local secondary storoge
30313033
if (pool.isLocal() && pool.getPoolType() == StoragePoolType.Filesystem && secHosts.isEmpty()) {

server/src/com/cloud/storage/download/DownloadMonitorImpl.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ public class DownloadMonitorImpl implements DownloadMonitor {
104104
SecondaryStorageVmDao _secStorageVmDao;
105105
@Inject
106106
AlertManager _alertMgr;
107+
@Inject
108+
SecondaryStorageVmManager _ssvmMgr;
107109

108110
@Inject
109111
private final DataCenterDao _dcDao = null;
@@ -361,7 +363,7 @@ public boolean downloadTemplateToStorage(VMTemplateVO template, Long zoneId) {
361363
long templateId = template.getId();
362364
boolean isPublic = template.isFeatured() || template.isPublicTemplate();
363365
for ( DataCenterVO dc : dcs ) {
364-
List<HostVO> ssHosts = _hostDao.listAllSecondaryStorageHosts(dc.getId());
366+
List<HostVO> ssHosts = _ssvmMgr.listAllTypesSecondaryStorageHostsInOneZone(dc.getId());
365367
for ( HostVO ssHost : ssHosts ) {
366368
if (isTemplateUpdateable(templateId, ssHost.getId())) {
367369
initiateTemplateDownload(templateId, ssHost);
@@ -481,7 +483,7 @@ public void addSystemVMTemplatesToHost(HostVO host, Map<String, TemplateInfo> te
481483

482484
@Override
483485
public void handleTemplateSync(long dcId) {
484-
List<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(dcId);
486+
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dcId);
485487
for ( HostVO ssHost : ssHosts ) {
486488
handleTemplateSync(ssHost);
487489
}

server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.util.ArrayList;
2121

22+
import java.util.Collections;
2223
import java.util.Date;
2324
import java.util.Enumeration;
2425
import java.util.HashMap;
@@ -98,6 +99,8 @@
9899
import com.cloud.utils.component.ComponentLocator;
99100
import com.cloud.utils.component.Inject;
100101
import com.cloud.utils.db.GlobalLock;
102+
import com.cloud.utils.db.SearchCriteria.Op;
103+
import com.cloud.utils.db.SearchCriteria2;
101104
import com.cloud.utils.events.SubscriptionMgr;
102105
import com.cloud.utils.exception.CloudRuntimeException;
103106
import com.cloud.utils.net.NetUtils;
@@ -200,6 +203,8 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
200203
UserVmDetailsDao _vmDetailsDao;
201204
@Inject
202205
protected ResourceManager _resourceMgr;
206+
@Inject
207+
protected SecondaryStorageVmManager _ssvmMgr;
203208

204209
private long _capacityScanInterval = DEFAULT_CAPACITY_SCAN_INTERVAL;
205210

@@ -258,7 +263,7 @@ public boolean generateSetupCommand(Long ssHostId) {
258263
return false;
259264
}
260265

261-
List<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(zoneId);
266+
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(zoneId);
262267
for( HostVO ssHost : ssHosts ) {
263268
String secUrl = ssHost.getStorageUrl();
264269
SecStorageSetupCommand setupCmd = new SecStorageSetupCommand(secUrl);
@@ -489,7 +494,7 @@ public SecondaryStorageVmVO startNew(long dataCenterId, SecondaryStorageVm.Role
489494
}
490495

491496
protected Map<String, Object> createSecStorageVmInstance(long dataCenterId, SecondaryStorageVm.Role role) {
492-
HostVO secHost = _hostDao.findSecondaryStorageHost(dataCenterId);
497+
HostVO secHost = findSecondaryStorageHost(dataCenterId);
493498
if (secHost == null) {
494499
String msg = "No secondary storage available in zone " + dataCenterId + ", cannot create secondary storage vm";
495500
s_logger.warn(msg);
@@ -675,7 +680,7 @@ public boolean isZoneReady(Map<Long, ZoneHostInfo> zoneHostInfoMap, long dataCen
675680
ZoneHostInfo zoneHostInfo = zoneHostInfoMap.get(dataCenterId);
676681
if (zoneHostInfo != null && (zoneHostInfo.getFlags() & RunningHostInfoAgregator.ZoneHostInfo.ROUTING_HOST_MASK) != 0) {
677682
VMTemplateVO template = _templateDao.findSystemVMTemplate(dataCenterId);
678-
HostVO secHost = _hostDao.findSecondaryStorageHost(dataCenterId);
683+
HostVO secHost = _ssvmMgr.findSecondaryStorageHost(dataCenterId);
679684
if (secHost == null) {
680685
if (s_logger.isDebugEnabled()) {
681686
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 boolean finalizeVirtualMachineProfile(VirtualMachineProfile<SecondaryStor
960965
Map<String, String> details = _vmDetailsDao.findDetails(vm.getId());
961966
vm.setDetails(details);
962967

963-
HostVO secHost = _hostDao.findSecondaryStorageHost(dest.getDataCenter().getId());
968+
HostVO secHost = _ssvmMgr.findSecondaryStorageHost(dest.getDataCenter().getId());
964969
assert (secHost != null);
965970

966971
StringBuilder buf = profile.getBootArgsBuilder();
@@ -1169,7 +1174,7 @@ public Pair<AfterScanAction, Object> scanPool(Long pool) {
11691174
List<SecondaryStorageVmVO> ssVms = _secStorageVmDao.getSecStorageVmListInStates(SecondaryStorageVm.Role.templateProcessor, dataCenterId, State.Running, State.Migrating,
11701175
State.Starting, State.Stopped, State.Stopping );
11711176
int vmSize = (ssVms == null)? 0 : ssVms.size();
1172-
List<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(dataCenterId);
1177+
List<HostVO> ssHosts = _ssvmMgr.listSecondaryStorageHostsInOneZone(dataCenterId);
11731178
int hostSize = (ssHosts == null)? 0 : ssHosts.size();
11741179
if ( hostSize > vmSize ) {
11751180
s_logger.info("No secondary storage vms found in datacenter id=" + dataCenterId + ", starting a new one");
@@ -1260,4 +1265,49 @@ public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForc
12601265
}
12611266
return null;
12621267
}
1268+
1269+
@Override
1270+
public HostVO findSecondaryStorageHost(long dcId) {
1271+
SearchCriteria2<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
1272+
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage);
1273+
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dcId);
1274+
List<HostVO> storageHosts = sc.list();
1275+
if (storageHosts == null || storageHosts.size() < 1) {
1276+
return null;
1277+
} else {
1278+
Collections.shuffle(storageHosts);
1279+
return storageHosts.get(0);
1280+
}
1281+
}
1282+
1283+
@Override
1284+
public List<HostVO> listSecondaryStorageHostsInAllZones() {
1285+
SearchCriteria2<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
1286+
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage);
1287+
return sc.list();
1288+
}
1289+
1290+
@Override
1291+
public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId) {
1292+
SearchCriteria2<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
1293+
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId);
1294+
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.SecondaryStorage);
1295+
return sc.list();
1296+
}
1297+
1298+
@Override
1299+
public List<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId) {
1300+
SearchCriteria2<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
1301+
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId);
1302+
sc.addAnd(sc.getEntity().getType(), Op.EQ, Host.Type.LocalSecondaryStorage);
1303+
return sc.list();
1304+
}
1305+
1306+
@Override
1307+
public List<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId) {
1308+
SearchCriteria2<HostVO, HostVO> sc = SearchCriteria2.create(HostVO.class);
1309+
sc.addAnd(sc.getEntity().getDataCenterId(), Op.EQ, dataCenterId);
1310+
sc.addAnd(sc.getEntity().getType(), Op.IN, Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage);
1311+
return sc.list();
1312+
}
12631313
}

server/src/com/cloud/storage/secondary/SecondaryStorageVmManager.java

100644100755
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
*/
1818
package com.cloud.storage.secondary;
1919

20+
import java.util.List;
21+
2022
import com.cloud.agent.api.Command;
2123
import com.cloud.agent.api.StartupCommand;
2224
import com.cloud.host.HostVO;
@@ -44,5 +46,10 @@ public interface SecondaryStorageVmManager extends Manager {
4446

4547
public Pair<HostVO, SecondaryStorageVmVO> assignSecStorageVm(long zoneId, Command cmd);
4648
boolean generateSetupCommand(Long hostId);
47-
boolean deleteHost(Long hostId);
49+
boolean deleteHost(Long hostId);
50+
public HostVO findSecondaryStorageHost(long dcId);
51+
public List<HostVO> listSecondaryStorageHostsInAllZones();
52+
public List<HostVO> listSecondaryStorageHostsInOneZone(long dataCenterId);
53+
public List<HostVO> listLocalSecondaryStorageHostsInOneZone(long dataCenterId);
54+
public List<HostVO> listAllTypesSecondaryStorageHostsInOneZone(long dataCenterId);
4855
}

0 commit comments

Comments
 (0)