cloudstack-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alena1...@apache.org
Subject git commit: updated refs/heads/internallb to d73ca7e
Date Wed, 24 Apr 2013 23:55:28 GMT
Updated Branches:
  refs/heads/internallb ca2fc3065 -> d73ca7ef7


InternalLb:
1) fixed the bug when the guest nic on internal lb vm wasnt set to be default
2) Don't send the rules to the internal lb vm if its in Stopped state


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d73ca7ef
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d73ca7ef
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d73ca7ef

Branch: refs/heads/internallb
Commit: d73ca7ef73ce8f16cd355e48a96c0fc35b037fed
Parents: ca2fc30
Author: Alena Prokharchyk <alena.prokharchyk@citrix.com>
Authored: Wed Apr 24 13:02:32 2013 -0700
Committer: Alena Prokharchyk <alena.prokharchyk@citrix.com>
Committed: Wed Apr 24 16:10:04 2013 -0700

----------------------------------------------------------------------
 .../element/InternalLoadBalancerElement.java       |   32 +-----
 .../lb/InternalLoadBalancerVMManagerImpl.java      |   79 +++++++++-----
 .../network/lb/LoadBalancingRulesManagerImpl.java  |    7 +-
 .../router/VirtualNetworkApplianceManagerImpl.java |    2 +-
 setup/db/db/schema-40to410.sql                     |    1 +
 5 files changed, 62 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73ca7ef/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
index 3857730..04bca16 100644
--- a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
+++ b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/element/InternalLoadBalancerElement.java
@@ -314,12 +314,13 @@ public class InternalLoadBalancerElement extends AdapterBase implements
LoadBala
 
     @Override
     public boolean applyLBRules(Network network, List<LoadBalancingRule> rules) throws
ResourceUnavailableException {
-        
         //1) Get Internal LB VMs to destroy
         Set<Ip> vmsToDestroy = getVmsToDestroy(rules);
         
         //2) Get rules to apply
         Map<Ip, List<LoadBalancingRule>> rulesToApply = getLbRulesToApply(rules);
+        s_logger.debug("Applying " + rulesToApply.size() + " on element " + this.getName());
+
  
         for (Ip sourceIp : rulesToApply.keySet()) {
             if (vmsToDestroy.contains(sourceIp)) {
@@ -359,8 +360,6 @@ public class InternalLoadBalancerElement extends AdapterBase implements
LoadBala
                 if (!_internalLbMgr.applyLoadBalancingRules(network, rulesToApply.get(sourceIp),
internalLbVms)) {
                     throw new CloudRuntimeException("Failed to apply load balancing rules
for ip " + sourceIp.addr() + 
                             " in network " + network.getId() + " on element " + this.getName());
-                } else {
-                    return true;
                 }
             }
         }
@@ -369,34 +368,13 @@ public class InternalLoadBalancerElement extends AdapterBase implements
LoadBala
     }
 
     protected Map<Ip, List<LoadBalancingRule>> getLbRulesToApply(List<LoadBalancingRule>
rules) {
-        //1) Group rules by the source ip address as NetworkManager always passes the entire
network lb config to the element
-        Map<Ip, List<LoadBalancingRule>> groupedRules = groupBySourceIp(rules);
-
-        //2) Apply only sets containing LB rules in transition state (Add/Revoke).
-        Map<Ip, List<LoadBalancingRule>> rulesToApply = new HashMap<Ip, List<LoadBalancingRule>>();
-        
-        for (Ip sourceIp : groupedRules.keySet()) {
-            boolean apply = false;
-            List<LoadBalancingRule> rulesToCheck = groupedRules.get(sourceIp);
-            for (LoadBalancingRule ruleToCheck : rulesToCheck) {
-                if (ruleToCheck.getState() == FirewallRule.State.Revoke || ruleToCheck.getState()
== FirewallRule.State.Add){
-                    apply = true;
-                    break;
-                }
-            }
-            
-            if (apply) {
-                rulesToApply.put(sourceIp, rulesToCheck);
-            } else {
-                s_logger.debug("Not applying the lb rules for soure ip " + sourceIp + " on
element " + this.getName()
-                        + " as there are no rules in transition state");
-            }
-        }        
+        //Group rules by the source ip address as NetworkManager always passes the entire
network lb config to the element
+        Map<Ip, List<LoadBalancingRule>> rulesToApply = groupBySourceIp(rules);
+      
         return rulesToApply;
     }
     
     
-    
     protected Set<Ip> getVmsToDestroy(List<LoadBalancingRule> rules) {
         //1) Group rules by the source ip address as NetworkManager always passes the entire
network lb config to the element
         Map<Ip, List<LoadBalancingRule>> groupedRules = groupBySourceIp(rules);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73ca7ef/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
index 8a4922b..7a48d7e 100644
--- a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
+++ b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
@@ -108,6 +108,7 @@ import com.cloud.vm.NicProfile;
 import com.cloud.vm.NicVO;
 import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.VirtualMachineGuru;
 import com.cloud.vm.VirtualMachineManager;
 import com.cloud.vm.VirtualMachineName;
@@ -183,31 +184,26 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
         }
         
         NicProfile controlNic = null;
+        String defaultDns1 = null;
+        String defaultDns2 = null;
+        Network guestNetwork = null;
       
         for (NicProfile nic : profile.getNics()) {
             int deviceId = nic.getDeviceId();
-            boolean ipv4 = false, ipv6 = false;
-            if (nic.getIp4Address() != null) {
-                ipv4 = true;
-                buf.append(" eth").append(deviceId).append("ip=").append(nic.getIp4Address());
-                buf.append(" eth").append(deviceId).append("mask=").append(nic.getNetmask());
-            }
-            if (nic.getIp6Address() != null) {
-                ipv6 = true;
-                buf.append(" eth").append(deviceId).append("ip6=").append(nic.getIp6Address());
-                buf.append(" eth").append(deviceId).append("ip6prelen=").append(NetUtils.getIp6CidrSize(nic.getIp6Cidr()));
-            }
+            buf.append(" eth").append(deviceId).append("ip=").append(nic.getIp4Address());
+            buf.append(" eth").append(deviceId).append("mask=").append(nic.getNetmask());
+            
             
             if (nic.isDefaultNic()) {
-                if (ipv4) {
-                    buf.append(" gateway=").append(nic.getGateway());
-                }
-                if (ipv6) {
-                    buf.append(" ip6gateway=").append(nic.getIp6Gateway());
-                }
+                buf.append(" gateway=").append(nic.getGateway());
+                defaultDns1 = nic.getDns1();
+                defaultDns2 = nic.getDns2();
             }
 
-            if (nic.getTrafficType() == TrafficType.Management) {
+            if (nic.getTrafficType() == TrafficType.Guest) {
+                guestNetwork = _ntwkModel.getNetwork(nic.getNetworkId());
+                buf.append(" sshonguest=true");
+            } else if (nic.getTrafficType() == TrafficType.Management) {
                 buf.append(" localgw=").append(dest.getPod().getGateway());
             } else if (nic.getTrafficType() == TrafficType.Control) {
                 controlNic = nic;
@@ -233,14 +229,28 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
         if (controlNic == null) {
             throw new CloudRuntimeException("Didn't start a control port");
         }
+                
+        if (guestNetwork != null) {
+            String domain = guestNetwork.getNetworkDomain();
+            if (domain != null) {
+                buf.append(" domain=" + domain);
+            }
+        }
+
+        buf.append(" dns1=").append(defaultDns1);
+        if (defaultDns2 != null) {
+            buf.append(" dns2=").append(defaultDns2);
+        }
 
         //FIXME - change if use other template for internal lb vm
-        String type = "vpcrouter";
+        String type = "elbvm";
         buf.append(" type=" + type);
 
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Boot Args for " + profile + ": " + buf.toString());
-        }
+        //FIXME - change it to DEBUG level later
+//        if (s_logger.isDebugEnabled()) {
+//            s_logger.debug("Boot Args for " + profile + ": " + buf.toString());
+//        }
+        s_logger.info("Boot Args for " + profile + ": " + buf.toString());
 
         return true;
     }
@@ -272,7 +282,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
         if (answer != null && answer instanceof CheckSshAnswer) {
             CheckSshAnswer sshAnswer = (CheckSshAnswer) answer;
             if (sshAnswer == null || !sshAnswer.getResult()) {
-                s_logger.warn("Unable to ssh to the VM: " + sshAnswer.getDetails());
+                s_logger.warn("Unable to ssh to the internal LB VM: " + sshAnswer.getDetails());
                 result = false;
             }
         } else {
@@ -296,7 +306,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
         if (answer != null && answer instanceof GetDomRVersionAnswer) {
             GetDomRVersionAnswer versionAnswer = (GetDomRVersionAnswer)answer;
             if (answer == null || !answer.getResult()) {
-                s_logger.warn("Unable to get the template/scripts version of router " + internalLbVm.getInstanceName()
+
+                s_logger.warn("Unable to get the template/scripts version of internal LB
VM " + internalLbVm.getInstanceName() +
                         " due to: " + versionAnswer.getDetails());
                 result = false;
             } else {
@@ -650,6 +660,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
             DomainRouterVO internalLbVm = deployInternalLbVm(owner, dest, plan, params, internalLbProvider,
offeringId, guestNetwork.getVpcId(),
                 networks, false);
             if (internalLbVm != null) {
+                _routerDao.addRouterToGuestNetwork(internalLbVm, guestNetwork);
                 internalLbs.add(internalLbVm);
             }
         } finally {
@@ -669,7 +680,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
         //Form networks
         List<Pair<NetworkVO, NicProfile>> networks = new ArrayList<Pair<NetworkVO,
NicProfile>>(3);
         
-        //1) Guest network
+        //1) Guest network - default
         if (guestNetwork != null) {
             s_logger.debug("Adding nic for Internal LB in Guest network " + guestNetwork);
             NicProfile guestNic = new NicProfile();
@@ -685,6 +696,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
             guestNic.setMode(guestNetwork.getMode());
             String gatewayCidr = guestNetwork.getCidr();
             guestNic.setNetmask(NetUtils.getCidrNetmask(gatewayCidr));
+            guestNic.setDefaultNic(true);
             networks.add(new Pair<NetworkVO, NicProfile>((NetworkVO) guestNetwork,
guestNic));
         }
 
@@ -759,7 +771,7 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
                 internalLbVm = new DomainRouterVO(id, routerOffering.getId(), internalLbProvider.getId(),

                 VirtualMachineName.getRouterName(id, _instance), template.getId(), template.getHypervisorType(),
                 template.getGuestOSId(), owner.getDomainId(), owner.getId(), false, 0, false,

-                RedundantState.UNKNOWN, false, false, vpcId);
+                RedundantState.UNKNOWN, false, false, VirtualMachine.Type.InternalLoadBalancerVm,
vpcId);
                 internalLbVm.setRole(Role.INTERNAL_LB_VM);
                 internalLbVm = _itMgr.allocate(internalLbVm, template, routerOffering, networks,
plan, null, owner);
             } catch (InsufficientCapacityException ex) {
@@ -853,8 +865,19 @@ InternalLoadBalancerVMManager, VirtualMachineGuru<DomainRouterVO>
{
             return true;
         }
         
-        //FIXME - add validation for the internal lb vm state here
-        return sendLBRules(internalLbVms.get(0), rules, network.getId());
+        //only one internal lb vm is supported per ip address at this time
+        VirtualRouter lbVm = internalLbVms.get(0);
+        if (lbVm.getState() == State.Running) {
+            return sendLBRules(lbVm, rules, network.getId());
+
+        } else if (lbVm.getState() == State.Stopped || lbVm.getState() == State.Stopping)
{
+            s_logger.debug("Internal LB VM " + lbVm.getInstanceName() + " is in " + lbVm.getState()
+ 
+                    ", so not sending apply lb rules commands to the backend");
+            return true;
+        } else {
+            s_logger.warn("Unable to apply lb rules, Internal LB VM is not in the right state
" + lbVm.getState());
+            throw new ResourceUnavailableException("Unable to apply lb rules; Internal LB
VM is not in the right state", DataCenter.class, lbVm.getDataCenterId());
+        }
     }
     
     protected boolean sendLBRules(VirtualRouter internalLbVm, List<LoadBalancingRule>
rules, long guestNetworkId) throws ResourceUnavailableException {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73ca7ef/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
index 676578a..ce87a59 100755
--- a/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
+++ b/server/src/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java
@@ -1487,9 +1487,10 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase
implements
     public boolean applyLoadBalancersForNetwork(long networkId, Scheme scheme) throws ResourceUnavailableException
{
         List<LoadBalancerVO> lbs = _lbDao.listByNetworkIdAndScheme(networkId, scheme);
         if (lbs != null) {
+            s_logger.debug("Applying load balancer rules of scheme " + scheme + " in network
id=" + networkId);
             return applyLoadBalancerRules(lbs, true);
         } else {
-            s_logger.info("Network id=" + networkId + " doesn't have load balancer rules,
nothing to apply");
+            s_logger.info("Network id=" + networkId + " doesn't have load balancer rules
of scheme " + scheme + ", nothing to apply");
             return true;
         }
     }
@@ -1526,7 +1527,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase
implements
         } else {
             List<LbDestination> dstList = getExistingDestinations(lb.getId());
             loadBalancing.setDestinations(dstList);
-	    List<LbHealthCheckPolicy> hcPolicyList = getHealthCheckPolicies(lb.getId());
+            List<LbHealthCheckPolicy> hcPolicyList = getHealthCheckPolicies(lb.getId());
             loadBalancing.setHealthCheckPolicies(hcPolicyList);
         }
 
@@ -2011,7 +2012,7 @@ public class LoadBalancingRulesManagerImpl<Type> extends ManagerBase
implements
     
     public boolean applyLbRules(List<LoadBalancingRule> rules, boolean continueOnError)
throws ResourceUnavailableException {
         if (rules == null || rules.size() == 0) {
-            s_logger.debug("There are no rules to forward to the network elements");
+            s_logger.debug("There are no Load Balancing Rules to forward to the network elements");
             return true;
         }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73ca7ef/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 164af38..512e562 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1528,7 +1528,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase
implements V
                 for (int i = 0; i < count; i++) {
                 List<Pair<NetworkVO, NicProfile>> networks = createRouterNetworks(owner,
isRedundant, plan, guestNetwork,
                         new Pair<Boolean, PublicIp>(publicNetwork, sourceNatIp));
-                //don't start the router as we are holding the network lock that needs to
be released at the end of router allocation
+                    //don't start the router as we are holding the network lock that needs
to be released at the end of router allocation
                     DomainRouterVO router = deployRouter(owner, destination, plan, params,
isRedundant, vrProvider, offeringId,
                         null, networks, false, null);
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d73ca7ef/setup/db/db/schema-40to410.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-40to410.sql b/setup/db/db/schema-40to410.sql
index ff1d908..386dc15 100644
--- a/setup/db/db/schema-40to410.sql
+++ b/setup/db/db/schema-40to410.sql
@@ -640,6 +640,7 @@ CREATE VIEW `cloud`.`domain_router_view` AS
         data_center.id data_center_id,
         data_center.uuid data_center_uuid,
         data_center.name data_center_name,
+        data_center.networktype data_center_type,
         data_center.dns1 dns1,
         data_center.dns2 dns2,
         data_center.ip6_dns1 ip6_dns1,


Mime
View raw message