X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openstack%2Fnet-virt%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fopenstack%2Fnetvirt%2FLBaaSHandler.java;h=01583e98de29addc2f67751525a5ab1a7748eaca;hb=d672464585b1dc84c3f1e33f6f8a52c8fa307685;hp=10783851d4e977589338ce5476e7bbe74d5b5268;hpb=bea1cf5aade7bc1c8b0b788175a35e9e56d3a78c;p=netvirt.git diff --git a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSHandler.java b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSHandler.java index 10783851d4..01583e98de 100644 --- a/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSHandler.java +++ b/openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSHandler.java @@ -10,13 +10,15 @@ package org.opendaylight.ovsdb.openstack.netvirt; -import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerAware; -import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerCRUD; -import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolCRUD; -import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD; -import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancer; -import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPool; -import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerPoolMember; +import org.opendaylight.neutron.spi.INeutronLoadBalancerAware; +import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD; +import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD; +import org.opendaylight.neutron.spi.INeutronNetworkCRUD; +import org.opendaylight.neutron.spi.INeutronPortCRUD; +import org.opendaylight.neutron.spi.INeutronSubnetCRUD; +import org.opendaylight.neutron.spi.NeutronLoadBalancer; +import org.opendaylight.neutron.spi.NeutronLoadBalancerPool; +import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember; import org.opendaylight.controller.sal.core.Node; import org.opendaylight.controller.sal.core.NodeConnector; import org.opendaylight.controller.sal.core.Property; @@ -50,6 +52,8 @@ public class LBaaSHandler extends AbstractHandler private volatile INeutronLoadBalancerCRUD neutronLBCache; private volatile INeutronLoadBalancerPoolCRUD neutronLBPoolCache; private volatile INeutronPortCRUD neutronPortsCache; + private volatile INeutronNetworkCRUD neutronNetworkCache; + private volatile INeutronSubnetCRUD neutronSubnetCache; private volatile LoadBalancerProvider loadBalancerProvider; private volatile ISwitchManager switchManager; @@ -79,8 +83,9 @@ public class LBaaSHandler extends AbstractHandler } else if (this.switchManager.getNodes().size() == 0) { logger.debug("Noop with LB {} creation because no nodes available.", lbConfig.getName()); } else { - for (Node node: this.switchManager.getNodes()) + for (Node node: this.switchManager.getNodes()) { loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.ADD); + } } } @@ -117,8 +122,9 @@ public class LBaaSHandler extends AbstractHandler } else if (this.switchManager.getNodes().size() == 0) { logger.debug("Noop with LB {} deletion because no nodes available.", lbConfig.getName()); } else { - for (Node node: this.switchManager.getNodes()) + for (Node node: this.switchManager.getNodes()) { loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.DELETE); + } } } @@ -165,7 +171,14 @@ public class LBaaSHandler extends AbstractHandler String loadBalancerName = neutronLB.getLoadBalancerName(); String loadBalancerVip = neutronLB.getLoadBalancerVipAddress(); String loadBalancerSubnetID = neutronLB.getLoadBalancerVipSubnetID(); + LoadBalancerConfiguration lbConfig = new LoadBalancerConfiguration(loadBalancerName, loadBalancerVip); + Map.Entry providerInfo = NeutronCacheUtils.getProviderInformation(neutronNetworkCache, neutronSubnetCache, loadBalancerSubnetID); + if (providerInfo != null) { + lbConfig.setProviderNetworkType(providerInfo.getKey()); + lbConfig.setProviderSegmentationId(providerInfo.getValue()); + } + lbConfig.setVmac(NeutronCacheUtils.getMacAddress(neutronPortsCache, loadBalancerSubnetID, loadBalancerVip)); String memberID, memberIP, memberMAC, memberProtocol, memberSubnetID; Integer memberPort; @@ -174,20 +187,21 @@ public class LBaaSHandler extends AbstractHandler for (NeutronLoadBalancerPool neutronLBPool: neutronLBPoolCache.getAllNeutronLoadBalancerPools()) { List members = neutronLBPool.getLoadBalancerPoolMembers(); memberProtocol = neutronLBPool.getLoadBalancerPoolProtocol(); - if (memberProtocol == null) + if (memberProtocol == null) { continue; - /* - * Only HTTP and HTTPS are supported as of this version - * TODO: Support all TCP load-balancers - */ - if (!(memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTP) || - memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTPS))) + } + + if (!(memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_TCP) || + memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTP) || + memberProtocol.equalsIgnoreCase(LoadBalancerConfiguration.PROTOCOL_HTTPS))) { continue; + } for (NeutronLoadBalancerPoolMember neutronLBPoolMember: members) { memberAdminStateIsUp = neutronLBPoolMember.getPoolMemberAdminStateIsUp(); memberSubnetID = neutronLBPoolMember.getPoolMemberSubnetID(); - if (memberSubnetID == null || memberAdminStateIsUp == null) + if (memberSubnetID == null || memberAdminStateIsUp == null) { continue; + } else if (memberSubnetID.equals(loadBalancerSubnetID) && memberAdminStateIsUp.booleanValue()) { memberID = neutronLBPoolMember.getPoolMemberID(); memberIP = neutronLBPoolMember.getPoolMemberAddress(); @@ -196,9 +210,10 @@ public class LBaaSHandler extends AbstractHandler logger.debug("Neutron LB pool member details incomplete: {}", neutronLBPoolMember); continue; } - memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberIP); - if (memberMAC == null) + memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberSubnetID, memberIP); + if (memberMAC == null) { continue; + } lbConfig.addMember(memberID, memberIP, memberMAC, memberProtocol, memberPort); } } @@ -218,19 +233,22 @@ public class LBaaSHandler extends AbstractHandler for (NeutronLoadBalancer neutronLB: neutronLBCache.getAllNeutronLoadBalancers()) { LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLB); - if (!lbConfig.isValid()) + if (!lbConfig.isValid()) { logger.debug("Neutron LB configuration invalid for {} ", lbConfig.getName()); - else { - if (type.equals(UpdateType.ADDED)) - loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.ADD); + } else { + if (type.equals(UpdateType.ADDED)) { + loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.ADD); /* When node disappears, we do nothing for now. Making a call to * loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.DELETE) * can lead to TransactionCommitFailedException. Similarly when node is changed, * because of remove followed by add, we do nothing. */ - else //(type.equals(UpdateType.REMOVED) || type.equals(UpdateType.CHANGED)) - continue; + + //(type.equals(UpdateType.REMOVED) || type.equals(UpdateType.CHANGED)) + } else { + continue; + } } } }