From c01aad6ba85e20b18e80b5cc6567cc1eed2737a3 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 3 May 2024 18:26:44 +0530 Subject: [PATCH] server: count hosts than get all hosts in capacity scans This refactors hotspot code to fetch just the count of hosts than all the host VOs for a zone, during capacity scans for systemvms. This reduces CPU and DB load, in really large (10k+ hosts) env. Signed-off-by: Rohit Yadav --- .../schema/src/main/java/com/cloud/host/dao/HostDao.java | 2 ++ .../src/main/java/com/cloud/host/dao/HostDaoImpl.java | 9 +++++++++ .../com/cloud/consoleproxy/ConsoleProxyManagerImpl.java | 4 ++-- .../secondarystorage/SecondaryStorageManagerImpl.java | 4 ++-- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java index d716be6cf97..df410d67c67 100644 --- a/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java +++ b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java @@ -41,6 +41,8 @@ public interface HostDao extends GenericDao, StateDao implements HostDao return getCount(sc); } + @Override + public Integer countUpAndEnabledHostsInZone(long zoneId) { + SearchCriteria sc = HostTypeCountSearch.create(); + sc.setParameters("type", Type.Routing); + sc.setParameters("resourceState", ResourceState.Enabled); + sc.setParameters("dc", zoneId); + return getCount(sc); + } + @Override public List listByDataCenterId(long id) { return listByDataCenterIdAndState(id, ResourceState.Enabled); diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index c1d4a22bf77..9d765695115 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -864,8 +864,8 @@ public class ConsoleProxyManagerImpl extends ManagerBase implements ConsoleProxy } public boolean isZoneReady(Map zoneHostInfoMap, long dataCenterId) { - List hosts = hostDao.listByDataCenterId(dataCenterId); - if (CollectionUtils.isEmpty(hosts)) { + Integer totalUpAndEnabledHosts = hostDao.countUpAndEnabledHostsInZone(dataCenterId); + if (totalUpAndEnabledHosts != null && totalUpAndEnabledHosts < 1) { if (s_logger.isDebugEnabled()) { s_logger.debug("Zone " + dataCenterId + " has no host available which is enabled and in Up state"); } diff --git a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java index 59ac4f44938..b50bedb9624 100644 --- a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java +++ b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java @@ -796,8 +796,8 @@ public class SecondaryStorageManagerImpl extends ManagerBase implements Secondar } public boolean isZoneReady(Map zoneHostInfoMap, long dataCenterId) { - List hosts = _hostDao.listByDataCenterId(dataCenterId); - if (CollectionUtils.isEmpty(hosts)) { + Integer totalUpAndEnabledHosts = _hostDao.countUpAndEnabledHostsInZone(dataCenterId); + if (totalUpAndEnabledHosts != null && totalUpAndEnabledHosts < 1) { if (s_logger.isDebugEnabled()) { s_logger.debug("Zone " + dataCenterId + " has no host available which is enabled and in Up state"); }