Bug 2001 - Removing code that deletes flow state when a node is removed. 03/11403/1
authorSrini Seetharaman <srini.seetharaman@gmail.com>
Sat, 20 Sep 2014 17:14:44 +0000 (10:14 -0700)
committerSrini Seetharaman <srini.seetharaman@gmail.com>
Sat, 20 Sep 2014 17:14:44 +0000 (10:14 -0700)
This patch ensures the TransactionCommitFailedException is not being caused.
We let the MD-SAL deal with clearing state and bringing it back when the node
is removed and added back.

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

index 609ae88c994342e9636c0aed2038ffe4dadf0397..add2bfe41d9b4c4f5fe4a123cd514222a02b460a 100644 (file)
@@ -169,8 +169,9 @@ public abstract class AbstractServiceInstance {
         try {
             commitFuture.get();  // TODO: Make it async (See bug 1362)
             logger.debug("Transaction success for deletion of Flow "+flowBuilder.getFlowName());
-        } catch (InterruptedException|ExecutionException e) {
+        } catch (Exception e) {
             logger.error(e.getMessage(), e);
+            modification.cancel();
         }
     }
 
index 3f76f9fa54e67c973c6cc2a37040597bad9e1619..10783851d4e977589338ce5476e7bbe74d5b5268 100644 (file)
@@ -75,9 +75,9 @@ public class LBaaSHandler extends AbstractHandler
         LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLB);
 
         if (!lbConfig.isValid()) {
-            logger.trace("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
+            logger.debug("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
         } else if (this.switchManager.getNodes().size() == 0) {
-            logger.trace("Noop with LB {} creation because no nodes available.", lbConfig.getName());
+            logger.debug("Noop with LB {} creation because no nodes available.", lbConfig.getName());
         } else {
             for (Node node: this.switchManager.getNodes())
                 loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.ADD);
@@ -113,9 +113,9 @@ public class LBaaSHandler extends AbstractHandler
         LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLB);
 
         if (!lbConfig.isValid()) {
-            logger.trace("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
+            logger.debug("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
         } else if (this.switchManager.getNodes().size() == 0) {
-            logger.trace("Noop with LB {} deletion because no nodes available.", lbConfig.getName());
+            logger.debug("Noop with LB {} deletion because no nodes available.", lbConfig.getName());
         } else {
             for (Node node: this.switchManager.getNodes())
                 loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.DELETE);
@@ -141,11 +141,7 @@ public class LBaaSHandler extends AbstractHandler
                 doNeutronLoadBalancerCreate(ev.getLoadBalancer());
                 break;
             case DELETE:
-                try {
                 doNeutronLoadBalancerDelete(ev.getLoadBalancer());
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
                 break;
             case UPDATE:
                 /**
@@ -223,12 +219,18 @@ public class LBaaSHandler extends AbstractHandler
         for (NeutronLoadBalancer neutronLB: neutronLBCache.getAllNeutronLoadBalancers()) {
             LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLB);
             if (!lbConfig.isValid())
-                logger.trace("Neutron LB configuration invalid for {} ", lbConfig.getName());
+                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.REMOVED))
-                    loadBalancerProvider.programLoadBalancerRules(node, lbConfig, Action.DELETE);
+
+               /* 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;
             }
         }
     }
index 0b9c3817433f47e3430c1418ce583128a7a05dc3..f745a4b54b5594bbdb30d24014429ebae148c6ca 100755 (executable)
@@ -76,11 +76,11 @@ public class LBaaSPoolHandler extends AbstractHandler
         Preconditions.checkNotNull(loadBalancerProvider);
         List<LoadBalancerConfiguration> lbConfigList = extractLBConfiguration(neutronLBPool);
         if (lbConfigList == null) {
-            logger.trace("Neutron LB configuration invalid for pool {} ", neutronLBPool.getLoadBalancerPoolID());
+            logger.debug("Neutron LB configuration invalid for pool {} ", neutronLBPool.getLoadBalancerPoolID());
         } else if (lbConfigList.size() == 0) {
-            logger.trace("No Neutron LB VIP not created yet for pool {} ", neutronLBPool.getLoadBalancerPoolID());
+            logger.debug("No Neutron LB VIP not created yet for pool {} ", neutronLBPool.getLoadBalancerPoolID());
         } else if (this.switchManager.getNodes().size() == 0) {
-            logger.trace("Noop with LB pool {} creation because no nodes available.", neutronLBPool.getLoadBalancerPoolID());
+            logger.debug("Noop with LB pool {} creation because no nodes available.", neutronLBPool.getLoadBalancerPoolID());
         } else {
             for (LoadBalancerConfiguration lbConfig: lbConfigList) {
                 if (!lbConfig.isValid()) {
@@ -128,11 +128,11 @@ public class LBaaSPoolHandler extends AbstractHandler
 
         List<LoadBalancerConfiguration> lbConfigList = extractLBConfiguration(neutronLBPool);
         if (lbConfigList == null) {
-            logger.trace("Neutron LB configuration invalid for pool {} ", neutronLBPool.getLoadBalancerPoolID());
+            logger.debug("Neutron LB configuration invalid for pool {} ", neutronLBPool.getLoadBalancerPoolID());
         } else if (lbConfigList.size() == 0) {
-            logger.trace("No Neutron LB VIP not created yet for pool {} ", neutronLBPool.getLoadBalancerPoolID());
+            logger.debug("No Neutron LB VIP not created yet for pool {} ", neutronLBPool.getLoadBalancerPoolID());
         } else if (this.switchManager.getNodes().size() == 0) {
-            logger.trace("Noop with LB pool {} deletion because no nodes available.", neutronLBPool.getLoadBalancerPoolID());
+            logger.debug("Noop with LB pool {} deletion because no nodes available.", neutronLBPool.getLoadBalancerPoolID());
         } else {
             for (LoadBalancerConfiguration lbConfig: lbConfigList) {
                 if (!lbConfig.isValid()) {
@@ -154,7 +154,7 @@ public class LBaaSPoolHandler extends AbstractHandler
      */
     @Override
     public void processEvent(AbstractEvent abstractEvent) {
-        logger.debug("Processing Loadbalancer event " + abstractEvent);
+        logger.debug("Processing Loadbalancer Pool event " + abstractEvent);
         if (!(abstractEvent instanceof NorthboundEvent)) {
             logger.error("Unable to process abstract event " + abstractEvent);
             return;
index 8c26f4a6a69ac904b829e4088b16462d91bd383d..e9c0ed38ceef8475fea1b58a3a9b84855988db41 100755 (executable)
@@ -72,13 +72,13 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
         Preconditions.checkNotNull(loadBalancerProvider);
         LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLBPoolMember);
         if (lbConfig == null) {
-            logger.trace("Neutron LB configuration invalid for member {} ", neutronLBPoolMember.getPoolMemberAddress());
+            logger.debug("Neutron LB configuration invalid for member {} ", neutronLBPoolMember.getPoolMemberAddress());
         } else if (lbConfig.getVip() == null) {
-            logger.trace("Neutron LB VIP not created yet for member {} ", neutronLBPoolMember.getPoolMemberID());
+            logger.debug("Neutron LB VIP not created yet for member {} ", neutronLBPoolMember.getPoolMemberID());
         } else if (!lbConfig.isValid()) {
-            logger.trace("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
+            logger.debug("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
         } else if (this.switchManager.getNodes().size() == 0) {
-            logger.trace("Noop with LB pool member {} creation because no nodes available.", neutronLBPoolMember.getPoolMemberID());
+            logger.debug("Noop with LB pool member {} creation because no nodes available.", neutronLBPoolMember.getPoolMemberID());
         } else {
             for (Node node: this.switchManager.getNodes())
                 loadBalancerProvider.programLoadBalancerPoolMemberRules(node, lbConfig,
@@ -119,13 +119,13 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
 
         LoadBalancerConfiguration lbConfig = extractLBConfiguration(neutronLBPoolMember);
         if (lbConfig == null) {
-            logger.trace("Neutron LB configuration invalid for member {} ", neutronLBPoolMember.getPoolMemberAddress());
+            logger.debug("Neutron LB configuration invalid for member {} ", neutronLBPoolMember.getPoolMemberAddress());
         } else if (lbConfig.getVip() == null) {
-            logger.trace("Neutron LB VIP not created yet for member {} ", neutronLBPoolMember.getPoolMemberID());
+            logger.debug("Neutron LB VIP not created yet for member {} ", neutronLBPoolMember.getPoolMemberID());
         } else if (!lbConfig.isValid()) {
-            logger.trace("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
+            logger.debug("Neutron LB pool configuration invalid for {} ", lbConfig.getName());
         } else if (this.switchManager.getNodes().size() == 0) {
-            logger.trace("Noop with LB pool member {} deletion because no nodes available.", neutronLBPoolMember.getPoolMemberID());
+            logger.debug("Noop with LB pool member {} deletion because no nodes available.", neutronLBPoolMember.getPoolMemberID());
         } else {
             /* As of now, deleting a member involves recomputing member indices.
              * This is best done through a complete update of the load balancer instance.
@@ -183,7 +183,7 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
         String memberIP = neutronLBPoolMember.getPoolMemberAddress();
         String memberMAC = NeutronCacheUtils.getMacAddress(neutronPortsCache, memberIP);
         if (memberMAC == null) {
-            logger.trace("Neutron LB pool member {} MAC address unavailable", memberID);
+            logger.debug("Neutron LB pool member {} MAC address unavailable", memberID);
             return null;
         }
         String memberSubnetID = neutronLBPoolMember.getPoolMemberSubnetID();
@@ -192,7 +192,7 @@ public class LBaaSPoolMemberHandler extends AbstractHandler
         String memberProtocol = null;
 
         if (memberSubnetID == null || memberID == null || memberPoolID == null) {
-            logger.trace("Neutron LB pool member details incomplete [id={}, pool_id={},subnet_id={}",
+            logger.debug("Neutron LB pool member details incomplete [id={}, pool_id={},subnet_id={}",
                     memberID, memberPoolID, memberSubnetID);
             return null;
         }