From 258037335c53fc4798605d4f482ff8dee93f09df Mon Sep 17 00:00:00 2001 From: Alex Huang Date: Thu, 14 Oct 2010 16:32:43 -0700 Subject: [PATCH] no cross pod for direct network --- .../allocator/impl/FirstFitAllocator.java | 3 ++- .../allocator/impl/RecreateHostAllocator.java | 22 +++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java index 23c83572d67..fdb401fb80e 100755 --- a/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java +++ b/server/src/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java @@ -25,6 +25,7 @@ import java.util.Map; import java.util.Set; import javax.ejb.Local; +import javax.naming.ConfigurationException; import org.apache.log4j.Logger; @@ -336,7 +337,7 @@ public class FirstFitAllocator implements HostAllocator { } @Override - public boolean configure(String name, Map params) { + public boolean configure(String name, Map params) throws ConfigurationException { _name = name; ComponentLocator locator = ComponentLocator.getCurrentLocator(); _hostDao = locator.getDao(HostDao.class); 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 508b7237e92..e9cbe05e824 100644 --- a/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java +++ b/server/src/com/cloud/agent/manager/allocator/impl/RecreateHostAllocator.java @@ -20,14 +20,18 @@ package com.cloud.agent.manager.allocator.impl; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import javax.ejb.Local; +import javax.naming.ConfigurationException; import org.apache.log4j.Logger; import com.cloud.agent.AgentManager; import com.cloud.agent.manager.allocator.HostAllocator; +import com.cloud.configuration.Config; +import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; @@ -42,6 +46,7 @@ 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.ComponentLocator; import com.cloud.utils.component.Inject; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VmCharacteristics; @@ -55,6 +60,7 @@ public class RecreateHostAllocator extends FirstFitRoutingAllocator { @Inject ClusterDao _clusterDao; @Inject AgentManager _agentMgr; @Inject VolumeDao _volsDao; + boolean _isDirect; @Override public Host allocateTo(VmCharacteristics vm, ServiceOffering offering, Host.Type type, DataCenterVO dc, HostPodVO pod, @@ -72,8 +78,8 @@ 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"); + if (_isDirect) { + s_logger.debug("Direct Networking mode so we can only allow the host to be allocated in the same pod due to public ip address cannot change"); long podId = sp.getPodId(); s_logger.debug("Pod id determined is " + podId); Iterator it = pcs.iterator(); @@ -108,6 +114,18 @@ public class RecreateHostAllocator extends FirstFitRoutingAllocator { return null; } + @Override + public boolean configure(String name, Map params) throws ConfigurationException { + super.configure(name, params); + + ComponentLocator locator = ComponentLocator.getCurrentLocator(); + ConfigurationDao configDao = locator.getDao(ConfigurationDao.class); + Map dbParams = configDao.getConfiguration(params); + + _isDirect = Boolean.parseBoolean(dbParams.get(Config.DirectAttachUntaggedVlanEnabled.key())); + return true; + } + protected RecreateHostAllocator() { super(); }