Bug 5264 : TEP delete does not clean up correctly 50/34450/1
authorHemaTG <hema.gopalkrishnan@ericsson.com>
Tue, 9 Feb 2016 00:28:55 +0000 (05:58 +0530)
committerHema Gopalakrishnan <hema.gopalkrishnan@ericsson.com>
Thu, 11 Feb 2016 09:58:49 +0000 (09:58 +0000)
DESCRIPTION :
   While deleting the TEP the reverse tunnels were not
   deleted correctly.

Change-Id: I64be3c13214add3e5d920ade64d84686a95f8932
Signed-off-by: HemaTG <hema.gopalkrishnan@ericsson.com>
(cherry picked from commit 53f0f6862f62d3862479492c56146ec4d371fa79)

itm/itm-impl/src/main/java/org/opendaylight/vpnservice/itm/confighelpers/ItmInternalTunnelDeleteWorker.java

index 096d81cffdec780ed96d74ee54cc12be3022ffa4..fc9a3a72bec9e643941d3a6ba657d219b3e90ae5 100644 (file)
@@ -61,9 +61,11 @@ public class ItmInternalTunnelDeleteWorker {
                             for (TunnelEndPoints dstTep : dstDpn.getTunnelEndPoints()) {
                                 logger.trace("Processing dstTep " + dstTep);
                                 if (dstTep.getTransportZone().equals(srcTZone)) {
+                                    if( checkIfTrunkExists(dstDpn.getDPNID(), srcDpn.getDPNID(), dataBroker)) {
                                     // remove all trunk interfaces
                                     logger.trace("Invoking removeTrunkInterface between source TEP {} , Destination TEP {} " ,srcTep , dstTep);
                                     removeTrunkInterface(dataBroker, idManagerService, srcTep, dstTep, srcDpn.getDPNID(), dstDpn.getDPNID(), t, futures);
+                                    }
                                 }
                             }
                         }
@@ -96,7 +98,7 @@ public class ItmInternalTunnelDeleteWorker {
                                                             tnlContainerPath, dataBroker);
                             // remove container if no DPNs are present
                             if (containerOptional.isPresent()) {
-                               DpnEndpoints deps = containerOptional.get();
+                               DpnEndpoints deps = containerOptional.get();
                                 if (deps.getDPNTEPsInfo() == null || deps.getDPNTEPsInfo().isEmpty()) {
                                     logger.trace("Container Removal from DPNTEPSINFO CONFIG DS");
                                     t.delete(LogicalDatastoreType.CONFIGURATION, tnlContainerPath);
@@ -122,7 +124,7 @@ public class ItmInternalTunnelDeleteWorker {
                                         .getValue());
         logger.trace("Removing forward Trunk Interface " + trunkfwdIfName);
         InstanceIdentifier<Interface> trunkIdentifier = ItmUtils.buildId(trunkfwdIfName);
-        logger.debug(  " Removing Trunk Interface Name - {} , Id - {} from Config DS {}, {} ", trunkfwdIfName, trunkIdentifier ) ;
+        logger.debug(  " Removing Trunk Interface Name - {} , Id - {} from Config DS ", trunkfwdIfName, trunkIdentifier ) ;
         t.delete(LogicalDatastoreType.CONFIGURATION, trunkIdentifier);
 
         // also update itm-state ds -- Delete the forward tunnel-interface from the tunnel list
@@ -138,8 +140,8 @@ public class ItmInternalTunnelDeleteWorker {
                                         .getIpv4Address().getValue(), srcTep.getIpAddress().getIpv4Address()
                                         .getValue());
         logger.trace("Removing Reverse Trunk Interface " + trunkRevIfName);
-        trunkIdentifier = ItmUtils.buildId(trunkfwdIfName);
-        logger.debug(  " Removing Trunk Interface Name - {} , Id - {} from Config DS {}, {} ", trunkfwdIfName, trunkIdentifier ) ;
+        trunkIdentifier = ItmUtils.buildId(trunkRevIfName);
+        logger.debug(  " Removing Trunk Interface Name - {} , Id - {} from Config DS ", trunkRevIfName, trunkIdentifier ) ;
         t.delete(LogicalDatastoreType.CONFIGURATION, trunkIdentifier);
 
      // also update itm-state ds -- Delete the reverse tunnel-interface from the tunnel list
@@ -151,4 +153,14 @@ public class ItmInternalTunnelDeleteWorker {
         // Release the Id for the Reverse trunk
         ItmUtils.releaseId(idManagerService, trunkRevIfName);
     }
+    private static boolean checkIfTrunkExists( BigInteger srcDpnId, BigInteger dstDpnId, DataBroker dataBroker) {
+        boolean existsFlag = false ;
+        InstanceIdentifier<InternalTunnel> path = InstanceIdentifier.create(
+                TunnelList.class)
+                    .child(InternalTunnel.class, new InternalTunnelKey( srcDpnId, dstDpnId));   
+        Optional<InternalTunnel> internalTunnels = ItmUtils.read(LogicalDatastoreType.CONFIGURATION,path, dataBroker) ;
+        if( internalTunnels.isPresent())
+            existsFlag = true ;
+           return existsFlag ;
+    }
 }