Skip to content

Commit aae3a0a

Browse files
committed
refactor to retrieve host count and cpu sockets in single query
Signed-off-by: Abhishek Kumar <[email protected]>
1 parent c885464 commit aae3a0a

File tree

6 files changed

+22
-17
lines changed

6 files changed

+22
-17
lines changed

engine/schema/src/main/java/com/cloud/host/dao/HostDao.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.cloud.hypervisor.Hypervisor.HypervisorType;
2828
import com.cloud.info.RunningHostCountInfo;
2929
import com.cloud.resource.ResourceState;
30+
import com.cloud.utils.Pair;
3031
import com.cloud.utils.db.GenericDao;
3132
import com.cloud.utils.fsm.StateDao;
3233

@@ -45,7 +46,7 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
4546

4647
Integer countUpAndEnabledHostsInZone(long zoneId);
4748

48-
Integer countAllCPUSockets();
49+
Pair<Integer, Integer> countAllHostsAndCPUSocketsByType(Type type);
4950

5051
/**
5152
* Mark all hosts associated with a certain management server

engine/schema/src/main/java/com/cloud/host/dao/HostDaoImpl.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import com.cloud.org.Managed;
5959
import com.cloud.resource.ResourceState;
6060
import com.cloud.utils.DateUtil;
61+
import com.cloud.utils.Pair;
6162
import com.cloud.utils.db.Attribute;
6263
import com.cloud.utils.db.DB;
6364
import com.cloud.utils.db.Filter;
@@ -515,13 +516,16 @@ public Integer countUpAndEnabledHostsInZone(long zoneId) {
515516
}
516517

517518
@Override
518-
public Integer countAllCPUSockets() {
519-
GenericSearchBuilder<HostVO, Integer> sb = createSearchBuilder(Integer.class);
519+
public Pair<Integer, Integer> countAllHostsAndCPUSocketsByType(Type type) {
520+
GenericSearchBuilder<HostVO, SumCount> sb = createSearchBuilder(SumCount.class);
521+
sb.select("sum", Func.SUM, sb.entity().getCpuSockets());
522+
sb.select("count", Func.COUNT, null);
520523
sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ);
521-
sb.select(null, Func.SUM, sb.entity().getCpuSockets());
522524
sb.done();
523-
SearchCriteria<Integer> sc = sb.create();
524-
return customSearch(sc, null).get(0);
525+
SearchCriteria<SumCount> sc = sb.create();
526+
sc.setParameters("type", type);
527+
SumCount result = customSearch(sc, null).get(0);
528+
return new Pair<>((int)result.count, (int)result.sum);
525529
}
526530

527531
private List<Long> listIdsForRoutingByZoneIdAndResourceState(long zoneId, ResourceState state) {

engine/schema/src/main/java/com/cloud/storage/dao/VolumeDaoImpl.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -554,14 +554,6 @@ public long secondaryStorageUsedForAccount(long accountId) {
554554
}
555555
}
556556

557-
public static class SumCount {
558-
public long sum;
559-
public long count;
560-
561-
public SumCount() {
562-
}
563-
}
564-
565557
@Override
566558
public List<VolumeVO> listVolumesToBeDestroyed() {
567559
SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();

framework/db/src/main/java/com/cloud/utils/db/GenericDaoBase.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2417,4 +2417,11 @@ private Optional<AttributeConverter<Object, Object>> getConverter(Field field) {
24172417
}
24182418
}
24192419

2420+
public static class SumCount {
2421+
public long sum;
2422+
public long count;
2423+
2424+
public SumCount() {
2425+
}
2426+
}
24202427
}

plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,14 +555,15 @@ public InfrastructureResponse listInfrastructure() {
555555
response.setZones(dataCenterDao.countAll());
556556
response.setPods(podDao.countAll());
557557
response.setClusters(clusterDao.countAll());
558-
response.setHosts(hostDao.countAllByType(Host.Type.Routing));
558+
Pair<Integer, Integer> hostCountAndCpuSockets = hostDao.countAllHostsAndCPUSocketsByType(Host.Type.Routing);
559+
response.setHosts(hostCountAndCpuSockets.first());
559560
response.setStoragePools(storagePoolDao.countAll());
560561
response.setImageStores(imageStoreDao.countAllImageStores());
561562
response.setSystemvms(vmInstanceDao.countByTypes(VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm));
562563
response.setRouters(domainRouterDao.countAllByRole(VirtualRouter.Role.VIRTUAL_ROUTER));
563564
response.setInternalLbs(domainRouterDao.countAllByRole(VirtualRouter.Role.INTERNAL_LB_VM));
564565
response.setAlerts(alertDao.countAll());
565-
response.setCpuSockets(hostDao.countAllCPUSockets());
566+
response.setCpuSockets(hostCountAndCpuSockets.second());
566567
response.setManagementServers(managementServerHostDao.countAll());
567568
return response;
568569
}

server/src/main/java/com/cloud/resourcelimit/ResourceLimitManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@
105105
import com.cloud.storage.dao.SnapshotDao;
106106
import com.cloud.storage.dao.VMTemplateDao;
107107
import com.cloud.storage.dao.VolumeDao;
108-
import com.cloud.storage.dao.VolumeDaoImpl.SumCount;
109108
import com.cloud.template.VirtualMachineTemplate;
110109
import com.cloud.user.Account;
111110
import com.cloud.user.AccountManager;
@@ -118,6 +117,7 @@
118117
import com.cloud.utils.db.DB;
119118
import com.cloud.utils.db.EntityManager;
120119
import com.cloud.utils.db.Filter;
120+
import com.cloud.utils.db.GenericDaoBase.SumCount;
121121
import com.cloud.utils.db.GenericSearchBuilder;
122122
import com.cloud.utils.db.GlobalLock;
123123
import com.cloud.utils.db.JoinBuilder;

0 commit comments

Comments
 (0)