From eb60dc690ceddb818239e61d795800c9b5a4d16e Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Tue, 12 Oct 2010 16:16:49 -0700 Subject: [PATCH] domr cannot be recreated in a different pod --- .../allocator/impl/RecreateHostAllocator.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java index 50bcaee3b32..508b7237e92 100644 --- a/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java +++ b/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java @@ -18,6 +18,7 @@ package com.cloud.agent.manager.allocator.impl; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Set; @@ -37,7 +38,9 @@ import com.cloud.host.Host; import com.cloud.service.ServiceOffering; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.StoragePoolDao; +import com.cloud.storage.dao.VolumeDao; import com.cloud.utils.Pair; import com.cloud.utils.component.Inject; import com.cloud.vm.VirtualMachine; @@ -51,6 +54,7 @@ public class RecreateHostAllocator extends FirstFitRoutingAllocator { @Inject StoragePoolDao _poolDao; @Inject ClusterDao _clusterDao; @Inject AgentManager _agentMgr; + @Inject VolumeDao _volsDao; @Override public Host allocateTo(VmCharacteristics vm, ServiceOffering offering, Host.Type type, DataCenterVO dc, HostPodVO pod, @@ -68,6 +72,18 @@ public class RecreateHostAllocator extends FirstFitRoutingAllocator { } List pcs = _agentMgr.listByDataCenter(dc.getId()); + if (vmType == VirtualMachine.Type.DomainRouter) { + s_logger.debug("VM is a domain router so we can only allow the host to be allocated in the same pod due to problems with the DHCP only domR"); + long podId = sp.getPodId(); + s_logger.debug("Pod id determined is " + podId); + Iterator it = pcs.iterator(); + while (it.hasNext()) { + PodCluster pc = it.next(); + if (pc.getPod().getId() != podId) { + it.remove(); + } + } + } Set> avoidPcs = new HashSet>(); for (Host h : avoid) { avoidPcs.add(new Pair(h.getPodId(), h.getClusterId()));