From 7ba48e7c65a64497ed236d3985b4a04bd16dc2d2 Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Mon, 11 Nov 2013 17:59:49 -0800 Subject: [PATCH] CS-18506: stopped vm cant start after disable threshold has been reached Changes: - Do not do the stoarge capacity check for a VM having READY Volumes that are already present on the storagepool. --- .../deploy/DeploymentPlanningManagerImpl.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java index 52abe835439..efcc12a90e8 100644 --- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java +++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java @@ -310,7 +310,8 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy List suitableHosts = new ArrayList(); suitableHosts.add(host); Pair> potentialResources = findPotentialDeploymentResources( - suitableHosts, suitableVolumeStoragePools, avoids, getPlannerUsage(planner,vmProfile, plan ,avoids)); + suitableHosts, suitableVolumeStoragePools, avoids, + getPlannerUsage(planner, vmProfile, plan, avoids), readyAndReusedVolumes); if (potentialResources != null) { Pod pod = _podDao.findById(host.getPodId()); Cluster cluster = _clusterDao.findById(host.getClusterId()); @@ -370,7 +371,8 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy List suitableHosts = new ArrayList(); suitableHosts.add(host); Pair> potentialResources = findPotentialDeploymentResources( - suitableHosts, suitableVolumeStoragePools, avoids, getPlannerUsage(planner,vmProfile, plan ,avoids)); + suitableHosts, suitableVolumeStoragePools, avoids, + getPlannerUsage(planner, vmProfile, plan, avoids), readyAndReusedVolumes); if (potentialResources != null) { Pod pod = _podDao.findById(host.getPodId()); Cluster cluster = _clusterDao.findById(host.getClusterId()); @@ -888,7 +890,8 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy // choose the potential host and pool for the VM if (!suitableVolumeStoragePools.isEmpty()) { Pair> potentialResources = findPotentialDeploymentResources( - suitableHosts, suitableVolumeStoragePools, avoid, resourceUsageRequired); + suitableHosts, suitableVolumeStoragePools, avoid, resourceUsageRequired, + readyAndReusedVolumes); if (potentialResources != null) { Pod pod = _podDao.findById(clusterVO.getPodId()); @@ -1016,11 +1019,16 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy } protected Pair> findPotentialDeploymentResources(List suitableHosts, Map> suitableVolumeStoragePools, ExcludeList avoid, - DeploymentPlanner.PlannerResourceUsage resourceUsageRequired) { + DeploymentPlanner.PlannerResourceUsage resourceUsageRequired, List readyAndReusedVolumes) { s_logger.debug("Trying to find a potenial host and associated storage pools from the suitable host/pool lists for this VM"); boolean hostCanAccessPool = false; boolean haveEnoughSpace = false; + + if (readyAndReusedVolumes == null) { + readyAndReusedVolumes = new ArrayList(); + } + Map storage = new HashMap(); TreeSet volumesOrderBySizeDesc = new TreeSet(new Comparator() { @Override @@ -1044,7 +1052,7 @@ public class DeploymentPlanningManagerImpl extends ManagerBase implements Deploy for (StoragePool potentialSPool : volumePoolList) { if (hostCanAccessSPool(potentialHost, potentialSPool)) { hostCanAccessPool = true; - if (multipleVolume) { + if (multipleVolume && !readyAndReusedVolumes.contains(vol)) { List requestVolumes = null; if (volumeAllocationMap.containsKey(potentialSPool)) requestVolumes = volumeAllocationMap.get(potentialSPool);