Policy exclusions & parallel netconf transactions
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / groupbasedpolicy / renderer / vpp / policy / ForwardingManager.java
index b0ba5b0dd87baeb700d2bfc7fba99ef5412d7a28..d2e0ac45b7f7b58f2703b541958b06dcd1c31d51 100644 (file)
@@ -82,6 +82,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_render
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170607.VxlanVni;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -212,7 +213,7 @@ public final class ForwardingManager {
         AddressEndpointWithLocation rEp = policyCtx.getAddrEpByKey().get(KeyFactory.addressEndpointKey(rEpKey));
 
         if (ConfigUtil.getInstance().isLispOverlayEnabled()) {
-            lispStateManager.configureEndPoint(rEp);
+            lispStateManager.processCreateEndPoint(rEp);
             if (ConfigUtil.getInstance().isL3FlatEnabled()) {
                 flatOverlayManager.configureEndpointForFlatOverlay(rEp);
                 loopbackManager.createSimpleLoopbackIfNeeded(rEp);
@@ -237,7 +238,7 @@ public final class ForwardingManager {
                 String l2FloodDomain = optL2FloodDomain.get();
                 try {
                     ifaceManager.addBridgeDomainToInterface(l2FloodDomain, rEp, aclManager.resolveAclsOnInterface(
-                            rEpKey, policyCtx), isBviForEndpoint(rEp)).get();
+                            rEpKey, policyCtx).get(), isBviForEndpoint(rEp)).get();
                     LOG.debug("Interface added to bridge-domain {} for endpoint {}", l2FloodDomain, rEp);
 
                     if (ConfigUtil.getInstance().isLispOverlayEnabled()) {
@@ -279,21 +280,21 @@ public final class ForwardingManager {
     public void removeForwardingForEndpoint(RendererEndpointKey rEpKey, PolicyContext policyCtx) {
         AddressEndpointWithLocation rEp = policyCtx.getAddrEpByKey().get(KeyFactory.addressEndpointKey(rEpKey));
         ExternalLocationCase rEpLoc = resolveAndValidateLocation(rEp);
+
+        if (ConfigUtil.getInstance().isLispOverlayEnabled()) {
+            lispStateManager.processDeleteEndpoint(rEp);
+            if (ConfigUtil.getInstance().isL3FlatEnabled()) {
+                flatOverlayManager.handleEndpointDeleteForFlatOverlay(rEp);
+            }
+            loopbackManager.handleEndpointDelete(rEp);
+        }
+
         if (rEpLoc == null || Strings.isNullOrEmpty(rEpLoc.getExternalNodeConnector())) {
             // nothing was created for endpoint therefore nothing is removed
             return;
         }
         if (!Strings.isNullOrEmpty(rEpLoc.getExternalNode())) {
             try {
-                if (ConfigUtil.getInstance().isLispOverlayEnabled()) {
-                    lispStateManager.deleteLispConfigurationForEndpoint(rEp);
-                    loopbackManager.handleEndpointDelete(rEp);
-
-                    if (ConfigUtil.getInstance().isL3FlatEnabled()) {
-                        flatOverlayManager.handleEndpointDeleteForFlatOverlay(rEp);
-                    }
-
-                }
                 ifaceManager.deleteBridgeDomainFromInterface(rEp).get();
                 LOG.debug("bridge-domain was deleted from interface for endpoint {}", rEp);
             } catch (InterruptedException | ExecutionException e) {
@@ -502,7 +503,7 @@ public final class ForwardingManager {
 
                 List<InstanceIdentifier<PhysicalInterface>>
                     physIfacesIid = resolvePhysicalInterfacesForNat(fwd.getRendererNetworkDomain());
-                Map<InstanceIdentifier<?>, RoutingCommand> routingCommandMap =
+                Map<InstanceIdentifier<Node>, RoutingCommand> routingCommandMap =
                     routingManager.createRouting(fwd, physIfacesIid, General.Operations.PUT);
 
                 routingCommandMap.forEach((node, command) -> {
@@ -524,7 +525,7 @@ public final class ForwardingManager {
 
                 List<InstanceIdentifier<PhysicalInterface>>
                     physIfacesIid = resolvePhysicalInterfacesForNat(fwd.getRendererNetworkDomain());
-                Map<InstanceIdentifier<?>, RoutingCommand> routingCommandMap =
+                Map<InstanceIdentifier<Node>, RoutingCommand> routingCommandMap =
                     routingManager.createRouting(fwd, physIfacesIid, General.Operations.DELETE);
                 routingCommandMap.forEach((node, command) -> {
                     if (command != null && routingManager.submitRouting(command, node)) {