refactor to retrieve host count and cpu sockets in single query

Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
This commit is contained in:
Abhishek Kumar 2024-10-20 19:58:43 +05:30
parent c885464c71
commit aae3a0a0b8
6 changed files with 22 additions and 17 deletions

View File

@ -27,6 +27,7 @@ import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.info.RunningHostCountInfo;
import com.cloud.resource.ResourceState;
import com.cloud.utils.Pair;
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.fsm.StateDao;
@ -45,7 +46,7 @@ public interface HostDao extends GenericDao<HostVO, Long>, StateDao<Status, Stat
Integer countUpAndEnabledHostsInZone(long zoneId);
Integer countAllCPUSockets();
Pair<Integer, Integer> countAllHostsAndCPUSocketsByType(Type type);
/**
* Mark all hosts associated with a certain management server

View File

@ -58,6 +58,7 @@ import com.cloud.org.Grouping;
import com.cloud.org.Managed;
import com.cloud.resource.ResourceState;
import com.cloud.utils.DateUtil;
import com.cloud.utils.Pair;
import com.cloud.utils.db.Attribute;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Filter;
@ -515,13 +516,16 @@ public class HostDaoImpl extends GenericDaoBase<HostVO, Long> implements HostDao
}
@Override
public Integer countAllCPUSockets() {
GenericSearchBuilder<HostVO, Integer> sb = createSearchBuilder(Integer.class);
public Pair<Integer, Integer> countAllHostsAndCPUSocketsByType(Type type) {
GenericSearchBuilder<HostVO, SumCount> sb = createSearchBuilder(SumCount.class);
sb.select("sum", Func.SUM, sb.entity().getCpuSockets());
sb.select("count", Func.COUNT, null);
sb.and("type", sb.entity().getType(), SearchCriteria.Op.EQ);
sb.select(null, Func.SUM, sb.entity().getCpuSockets());
sb.done();
SearchCriteria<Integer> sc = sb.create();
return customSearch(sc, null).get(0);
SearchCriteria<SumCount> sc = sb.create();
sc.setParameters("type", type);
SumCount result = customSearch(sc, null).get(0);
return new Pair<>((int)result.count, (int)result.sum);
}
private List<Long> listIdsForRoutingByZoneIdAndResourceState(long zoneId, ResourceState state) {

View File

@ -554,14 +554,6 @@ public class VolumeDaoImpl extends GenericDaoBase<VolumeVO, Long> implements Vol
}
}
public static class SumCount {
public long sum;
public long count;
public SumCount() {
}
}
@Override
public List<VolumeVO> listVolumesToBeDestroyed() {
SearchCriteria<VolumeVO> sc = AllFieldsSearch.create();

View File

@ -2417,4 +2417,11 @@ public abstract class GenericDaoBase<T, ID extends Serializable> extends Compone
}
}
public static class SumCount {
public long sum;
public long count;
public SumCount() {
}
}
}

View File

@ -555,14 +555,15 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements
response.setZones(dataCenterDao.countAll());
response.setPods(podDao.countAll());
response.setClusters(clusterDao.countAll());
response.setHosts(hostDao.countAllByType(Host.Type.Routing));
Pair<Integer, Integer> hostCountAndCpuSockets = hostDao.countAllHostsAndCPUSocketsByType(Host.Type.Routing);
response.setHosts(hostCountAndCpuSockets.first());
response.setStoragePools(storagePoolDao.countAll());
response.setImageStores(imageStoreDao.countAllImageStores());
response.setSystemvms(vmInstanceDao.countByTypes(VirtualMachine.Type.ConsoleProxy, VirtualMachine.Type.SecondaryStorageVm));
response.setRouters(domainRouterDao.countAllByRole(VirtualRouter.Role.VIRTUAL_ROUTER));
response.setInternalLbs(domainRouterDao.countAllByRole(VirtualRouter.Role.INTERNAL_LB_VM));
response.setAlerts(alertDao.countAll());
response.setCpuSockets(hostDao.countAllCPUSockets());
response.setCpuSockets(hostCountAndCpuSockets.second());
response.setManagementServers(managementServerHostDao.countAll());
return response;
}

View File

@ -105,7 +105,6 @@ import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VolumeDao;
import com.cloud.storage.dao.VolumeDaoImpl.SumCount;
import com.cloud.template.VirtualMachineTemplate;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
@ -118,6 +117,7 @@ import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.EntityManager;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.GenericDaoBase.SumCount;
import com.cloud.utils.db.GenericSearchBuilder;
import com.cloud.utils.db.GlobalLock;
import com.cloud.utils.db.JoinBuilder;