From: Chetan Arakere Gowdru Date: Mon, 9 Sep 2019 11:22:13 +0000 (+0530) Subject: Stale ExternalIps in vpn-instance-op-data X-Git-Tag: release/magnesium~52 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=5602bb1b64344d066109af931a521b8f205dec8a;p=netvirt.git Stale ExternalIps in vpn-instance-op-data Description: Becuase of stale SNAT ExternalIPs peristed in vpn-instance-op-data DS, the InternetVPN been kept in pending_delete state which resulted in stale table=21 flows post clean-up. Changes are done to handle removal of this stale entries from vpn-instance-op-data DS for NAT Ips. Change-Id: Iede3ca51201b9d6ee4cc2caa1dcecd40b08860a3 Signed-off-by: Chetan Arakere Gowdru --- diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/ha/SnatNodeEventListener.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/ha/SnatNodeEventListener.java index d9206d99d1..19d86bb5be 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/ha/SnatNodeEventListener.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/ha/SnatNodeEventListener.java @@ -21,6 +21,7 @@ import org.opendaylight.serviceutils.tools.mdsal.listener.AbstractClusteredAsync import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.config.rev170206.NatserviceConfig; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; @@ -34,23 +35,32 @@ import org.slf4j.LoggerFactory; public class SnatNodeEventListener extends AbstractClusteredAsyncDataTreeChangeListener { private static final Logger LOG = LoggerFactory.getLogger(SnatNodeEventListener.class); private final NatSwitchCache centralizedSwitchCache; + private final NatserviceConfig.NatMode natMode; @Inject public SnatNodeEventListener(final DataBroker dataBroker, - final NatSwitchCache centralizedSwitchCache) { + final NatSwitchCache centralizedSwitchCache, + final NatserviceConfig config) { super(dataBroker,new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier .create(Nodes.class).child(Node.class)), Executors.newSingleThreadExecutor()); this.centralizedSwitchCache = centralizedSwitchCache; + if (config != null) { + this.natMode = config.getNatMode(); + } else { + this.natMode = NatserviceConfig.NatMode.Controller; + } } @Override public void remove(Node dataObjectModification) { - NodeKey nodeKey = dataObjectModification.key(); - Uint64 dpnId = MDSALUtil.getDpnIdFromNodeName(nodeKey.getId()); - LOG.info("Dpn removed {}", dpnId); - centralizedSwitchCache.removeSwitch(dpnId); + if (natMode == NatserviceConfig.NatMode.Conntrack) { + NodeKey nodeKey = dataObjectModification.key(); + Uint64 dpnId = MDSALUtil.getDpnIdFromNodeName(nodeKey.getId()); + LOG.info("Dpn removed {}", dpnId); + centralizedSwitchCache.removeSwitch(dpnId); + } } @Override @@ -61,9 +71,11 @@ public class SnatNodeEventListener extends AbstractClusteredAsyncDataTreeChange @Override public void add(Node dataObjectModification) { - NodeKey nodeKey = dataObjectModification.key(); - Uint64 dpnId = MDSALUtil.getDpnIdFromNodeName(nodeKey.getId()); - LOG.info("Dpn added {}", dpnId); - centralizedSwitchCache.addSwitch(dpnId); + if (natMode == NatserviceConfig.NatMode.Conntrack) { + NodeKey nodeKey = dataObjectModification.key(); + Uint64 dpnId = MDSALUtil.getDpnIdFromNodeName(nodeKey.getId()); + LOG.info("Dpn added {}", dpnId); + centralizedSwitchCache.addSwitch(dpnId); + } } } diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalRoutersListener.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalRoutersListener.java index 46755841fd..16f390f980 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalRoutersListener.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalRoutersListener.java @@ -2333,6 +2333,7 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBase> future = fibService.removeFibEntry(input); removeTunnelTableEntry(dpnId, label, removeFlowInvTx); @@ -2362,7 +2373,7 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBase> labelFuture = Futures.transformAsync(future, result -> { //Release label - if (result.isSuccessful()) { + if (result.isSuccessful() && label != null && label.toJava() > 0) { NatUtil.removePreDnatToSnatTableEntry(removeFlowInvTx, mdsalManager, dpnId); RemoveVpnLabelInput labelInput = new RemoveVpnLabelInputBuilder() .setVpnName(externalVpn).setIpPrefix(externalIp).build(); @@ -2546,6 +2557,7 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBase