Updating the LB pool member DELETE and UPDATE processing. 74/10674/1
authorSrini Seetharaman <srini.seetharaman@gmail.com>
Wed, 3 Sep 2014 08:05:28 +0000 (01:05 -0700)
committerSrini Seetharaman <srini.seetharaman@gmail.com>
Wed, 3 Sep 2014 08:05:28 +0000 (01:05 -0700)
- DELETE will lead to enqueuing an UPDATE LB instance event
- UPDATE will be ignored because weight update is not supported.

Change-Id: I05d192956bc16bb124fa4cc5a7dcf035f63bc9a1
Signed-off-by: Srini Seetharaman <srini.seetharaman@gmail.com>
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/LBaaSPoolMemberHandler.java

index c99ec2c0eedf19ac1e51b8a0383858629673c11a..b51cb644357552836be216159b1bc85462d78b25 100755 (executable)
@@ -109,21 +109,16 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
     @Override
     public void neutronLoadBalancerPoolMemberDeleted(NeutronLoadBalancerPoolMember neutronLBPoolMember) {
         logger.debug("Neutron LB Pool Member Deletion : {}", neutronLBPoolMember.toString());
-        enqueueEvent(new NorthboundEvent(neutronLBPoolMember, Action.DELETE));
-    }
 
-    private void doNeutronLoadBalancerPoolMemberDelete(NeutronLoadBalancerPoolMember neutronLBPoolMember) {
-        Preconditions.checkNotNull(loadBalancerProvider);
-        LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLBPoolMember);
-        if (lbConfig == null) {
-            logger.trace("Neutron LB configuration invalid for member {} ", neutronLBPoolMember.getPoolMemberAddress());
-        }
-        else if (!lbConfig.isValid()) {
-            logger.trace("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
-        } else {
-            for (Node node: this.switchManager.getNodes())
-                loadBalancerProvider.programLoadBalancerPoolMemberRules(node, lbConfig,
-                        lbConfig.getMembers().get(neutronLBPoolMember.getPoolMemberID()), Action.DELETE);
+        /* As of now, deleting a member involves recomputing member indices.
+         * This is best done through a complete update of the load balancer instance.
+         */
+        for (NeutronLoadBalancer neutronLB: neutronLBCache.getAllNeutronLoadBalancers()) {
+            String loadBalancerSubnetID = neutronLB.getLoadBalancerVipSubnetID();
+            if (neutronLBPoolMember.getPoolMemberSubnetID().equals(loadBalancerSubnetID)) {
+                enqueueEvent(new NorthboundEvent(neutronLB, Action.UPDATE));
+                break;
+            }
         }
     }
 
@@ -144,14 +139,13 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
             case ADD:
                 doNeutronLoadBalancerPoolMemberCreate(ev.getLoadBalancerPoolMember());
             case DELETE:
-                doNeutronLoadBalancerPoolMemberDelete(ev.getLoadBalancerPoolMember());
+                logger.warn("Load balancer pool member delete event should not have been triggered");
             case UPDATE:
                 /**
-                 * Currently member update requires delete and re-adding
-                 * Also, weights and weight updates are not supported
+                 * Typical upgrade involves changing weights. Since weights are not
+                 * supported yet, updates are not supported either.
                  */
-                doNeutronLoadBalancerPoolMemberDelete(ev.getLoadBalancerPoolMember());
-                doNeutronLoadBalancerPoolMemberCreate(ev.getLoadBalancerPoolMember());
+                logger.warn("Load balancer pool member update is not supported");
                 break;
             default:
                 logger.warn("Unable to process event action " + ev.getAction());