From 5c984eaef8385c5022127fbad43b74f6bc147050 Mon Sep 17 00:00:00 2001 From: Prachi Damle Date: Fri, 6 Dec 2013 12:45:33 -0800 Subject: [PATCH] CLOUDSTACK-5140: A stopped vm cant start after disable threshold has been reached on the storage pool Changes: - Do not do the stoarge capacity check for a VM having READY Volumes that are already present on the storagepool. Conflicts: server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java Conflicts: server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java --- .../deploy/DeploymentPlanningManagerImpl.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java index 6e441a99031..5d5258b5933 100644 --- a/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java +++ b/server/src/com/cloud/deploy/DeploymentPlanningManagerImpl.java @@ -308,7 +308,7 @@ 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()); @@ -369,7 +369,7 @@ 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()); @@ -886,7 +886,7 @@ 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()); @@ -1014,11 +1014,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 @@ -1042,7 +1047,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);