From a0097d83da59fa965aa297a377d3c07d7cdd98dc Mon Sep 17 00:00:00 2001 From: Anurag Awasthi Date: Thu, 4 Jul 2019 16:21:17 +0530 Subject: [PATCH] engine/schema: count Starting along with Running VMs for user dispersing planner (#3462) Consider running and starting VMs when considering load ona host for VM deployement for more accurate dispersion. Fixes: #3442 --- .../java/com/cloud/vm/dao/VMInstanceDao.java | 2 +- .../com/cloud/vm/dao/VMInstanceDaoImpl.java | 18 +++++++++--------- .../cloud/deploy/UserDispersingPlanner.java | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java index 6fda4a15c32..ce4d46abc25 100755 --- a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDao.java @@ -122,7 +122,7 @@ public interface VMInstanceDao extends GenericDao, StateDao< List listHostIdsByVmCount(long dcId, Long podId, Long clusterId, long accountId); - Long countRunningByAccount(long accountId); + Long countRunningAndStartingByAccount(long accountId); Long countByZoneAndState(long zoneId, State state); diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java index 1565f53233b..405e023f10a 100755 --- a/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/VMInstanceDaoImpl.java @@ -87,7 +87,7 @@ public class VMInstanceDaoImpl extends GenericDaoBase implem protected SearchBuilder HostNameAndZoneSearch; protected GenericSearchBuilder FindIdsOfVirtualRoutersByAccount; protected GenericSearchBuilder CountActiveByHost; - protected GenericSearchBuilder CountRunningByAccount; + protected GenericSearchBuilder CountRunningAndStartingByAccount; protected GenericSearchBuilder CountByZoneAndState; protected SearchBuilder NetworkTypeSearch; protected GenericSearchBuilder DistinctHostNameSearch; @@ -245,11 +245,11 @@ public class VMInstanceDaoImpl extends GenericDaoBase implem CountActiveByHost.and("state", CountActiveByHost.entity().getState(), SearchCriteria.Op.IN); CountActiveByHost.done(); - CountRunningByAccount = createSearchBuilder(Long.class); - CountRunningByAccount.select(null, Func.COUNT, null); - CountRunningByAccount.and("account", CountRunningByAccount.entity().getAccountId(), SearchCriteria.Op.EQ); - CountRunningByAccount.and("state", CountRunningByAccount.entity().getState(), SearchCriteria.Op.EQ); - CountRunningByAccount.done(); + CountRunningAndStartingByAccount = createSearchBuilder(Long.class); + CountRunningAndStartingByAccount.select(null, Func.COUNT, null); + CountRunningAndStartingByAccount.and("account", CountRunningAndStartingByAccount.entity().getAccountId(), SearchCriteria.Op.EQ); + CountRunningAndStartingByAccount.and("states", CountRunningAndStartingByAccount.entity().getState(), SearchCriteria.Op.IN); + CountRunningAndStartingByAccount.done(); CountByZoneAndState = createSearchBuilder(Long.class); CountByZoneAndState.select(null, Func.COUNT, null); @@ -749,10 +749,10 @@ public class VMInstanceDaoImpl extends GenericDaoBase implem } @Override - public Long countRunningByAccount(long accountId) { - SearchCriteria sc = CountRunningByAccount.create(); + public Long countRunningAndStartingByAccount(long accountId) { + SearchCriteria sc = CountRunningAndStartingByAccount.create(); sc.setParameters("account", accountId); - sc.setParameters("state", State.Running); + sc.setParameters("states", new Object[] {State.Starting, State.Running}); return customSearch(sc, null).get(0); } diff --git a/plugins/deployment-planners/user-dispersing/src/main/java/com/cloud/deploy/UserDispersingPlanner.java b/plugins/deployment-planners/user-dispersing/src/main/java/com/cloud/deploy/UserDispersingPlanner.java index ce66294ff25..24bc061b218 100644 --- a/plugins/deployment-planners/user-dispersing/src/main/java/com/cloud/deploy/UserDispersingPlanner.java +++ b/plugins/deployment-planners/user-dispersing/src/main/java/com/cloud/deploy/UserDispersingPlanner.java @@ -146,7 +146,7 @@ public class UserDispersingPlanner extends FirstFitPlanner implements Deployment //normalize the vmCountMap LinkedHashMap normalisedVmCountIdMap = new LinkedHashMap(); - Long totalVmsOfAccount = vmInstanceDao.countRunningByAccount(accountId); + Long totalVmsOfAccount = vmInstanceDao.countRunningAndStartingByAccount(accountId); if (s_logger.isDebugEnabled()) { s_logger.debug("Total VMs for account: " + totalVmsOfAccount); }