From 8134cfb4c80cb6932cec1bf70a9af41d02fa12e6 Mon Sep 17 00:00:00 2001 From: prachi Date: Wed, 23 Nov 2011 17:39:55 -0800 Subject: [PATCH] Bug 11131 - Allocators: when vm fails to deploy in DataCenter, we should never retry in the same DC again as the DC is already in Avoid set Changes: - Added check in planner to verfiy that the datacenter is not in avoid set. If found in avoid set, planner does not proceed. --- api/src/com/cloud/deploy/DeploymentPlanner.java | 11 +++++++++-- server/src/com/cloud/deploy/FirstFitPlanner.java | 11 ++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/api/src/com/cloud/deploy/DeploymentPlanner.java b/api/src/com/cloud/deploy/DeploymentPlanner.java index a891a129451..669024c63e7 100644 --- a/api/src/com/cloud/deploy/DeploymentPlanner.java +++ b/api/src/com/cloud/deploy/DeploymentPlanner.java @@ -246,7 +246,14 @@ public interface DeploymentPlanner extends Adapter { return false; } - + + public boolean shouldAvoid(DataCenter dc) { + if (_dcIds != null && _dcIds.contains(dc.getId())) { + return true; + } + return false; + } + public Set getDataCentersToAvoid(){ return _dcIds; } @@ -265,6 +272,6 @@ public interface DeploymentPlanner extends Adapter { public Set getPoolsToAvoid(){ return _poolIds; - } + } } } diff --git a/server/src/com/cloud/deploy/FirstFitPlanner.java b/server/src/com/cloud/deploy/FirstFitPlanner.java index c99f3fc293f..26e7f2c095c 100755 --- a/server/src/com/cloud/deploy/FirstFitPlanner.java +++ b/server/src/com/cloud/deploy/FirstFitPlanner.java @@ -113,8 +113,17 @@ public class FirstFitPlanner extends PlannerBase implements DeploymentPlanner { DeploymentPlan plan, ExcludeList avoid) throws InsufficientServerCapacityException { VirtualMachine vm = vmProfile.getVirtualMachine(); - ServiceOffering offering = vmProfile.getServiceOffering(); DataCenter dc = _dcDao.findById(vm.getDataCenterIdToDeployIn()); + + //check if datacenter is in avoid set + if(avoid.shouldAvoid(dc)){ + if (s_logger.isDebugEnabled()) { + s_logger.debug("DataCenter id = '"+ dc.getId() +"' provided is in avoid set, DeploymentPlanner cannot allocate the VM, returning."); + } + return null; + } + + ServiceOffering offering = vmProfile.getServiceOffering(); int cpu_requested = offering.getCpu() * offering.getSpeed(); long ram_requested = offering.getRamSize() * 1024L * 1024L;