X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=vpnmanager%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Fvpnmanager%2Fintervpnlink%2FInterVpnLinkListener.java;h=114cff1ca30159ae2bdca27738f55bbde40d2bce;hb=4e7ddfeccb5ddb7c7d45ac8b634510c9a9f04e82;hp=0034b61564a00ed4336750bc2e69ab8f2e0b28ba;hpb=618519cef8ff4e11227b74ca1d1700406079388f;p=netvirt.git diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkListener.java index 0034b61564..114cff1ca3 100755 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkListener.java @@ -7,13 +7,15 @@ */ package org.opendaylight.netvirt.vpnmanager.intervpnlink; +import static org.opendaylight.controller.md.sal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS; +import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; + import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; -import java.math.BigInteger; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; @@ -23,7 +25,6 @@ import javax.inject.Inject; import javax.inject.Singleton; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; -import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase; import org.opendaylight.genius.infra.ManagedNewTransactionRunner; @@ -74,6 +75,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt. import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.inter.vpn.link.rev160311.inter.vpn.links.InterVpnLinkKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -97,6 +100,8 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase firstDpnList = ivpnLinkLocator.selectSuitableDpns(add); + List firstDpnList = ivpnLinkLocator.selectSuitableDpns(add); if (firstDpnList != null && !firstDpnList.isEmpty()) { - List secondDpnList = firstDpnList; + List secondDpnList = firstDpnList; Long firstVpnLportTag = allocateVpnLinkLportTag(key.getName() + vpn1Name); Long secondVpnLportTag = allocateVpnLinkLportTag(key.getName() + vpn2Name); @@ -233,21 +241,21 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase DPNs Map. // Note: when a set of DPNs is calculated for Vpn1, these DPNs are added to the VpnToDpn map of Vpn2. // Why? because we do the handover from Vpn1 to Vpn2 in those DPNs, so in those DPNs we must know how // to reach to Vpn2 targets. If new Vpn2 targets are added later, the Fib will be maintained in these // DPNs even if Vpn2 is not physically present there. - InterVpnLinkUtil.updateVpnFootprint(vpnFootprintService, vpn2Name, vpn2PrimaryRd, firstDpnList); - InterVpnLinkUtil.updateVpnFootprint(vpnFootprintService, vpn1Name, vpn1PrimaryRd, secondDpnList); + interVpnLinkUtil.updateVpnFootprint(vpn2Name, vpn2PrimaryRd, firstDpnList); + interVpnLinkUtil.updateVpnFootprint(vpn1Name, vpn1PrimaryRd, secondDpnList); // Program static routes if needed Optional interVpnLink = @@ -267,7 +275,7 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase vrfEntriesSecondEndpoint = - VpnUtil.findVrfEntriesByNexthop(dataBroker, rd1, del.getSecondEndpoint().getIpAddress().getValue()); + vpnUtil.findVrfEntriesByNexthop(rd1, del.getSecondEndpoint().getIpAddress().getValue()); String vpn2Uuid = del.getSecondEndpoint().getVpnUuid().getValue(); - String rd2 = VpnUtil.getVpnRd(dataBroker, vpn2Uuid); + String rd2 = vpnUtil.getVpnRd(vpn2Uuid); LOG.debug("Removing leaked routes in VPN {} rd={}", vpn2Uuid, rd2); - VpnUtil.removeVrfEntriesByOrigin(dataBroker, rd2, RouteOrigin.INTERVPN); + vpnUtil.removeVrfEntriesByOrigin(rd2, RouteOrigin.INTERVPN); List vrfEntriesFirstEndpoint = - VpnUtil.findVrfEntriesByNexthop(dataBroker, rd2, del.getFirstEndpoint().getIpAddress().getValue()); + vpnUtil.findVrfEntriesByNexthop(rd2, del.getFirstEndpoint().getIpAddress().getValue()); - Optional optIVpnLinkState = InterVpnLinkUtil.getInterVpnLinkState(dataBroker, del.getName()); + Optional optIVpnLinkState = interVpnLinkUtil.getInterVpnLinkState(del.getName()); if (optIVpnLinkState.isPresent()) { InterVpnLinkState interVpnLinkState = optIVpnLinkState.get(); boolean isVpnFirstEndPoint = true; if (interVpnLinkState.getFirstEndpointState() != null) { - Long firstEndpointLportTag = interVpnLinkState.getFirstEndpointState().getLportTag(); + Long firstEndpointLportTag = interVpnLinkState.getFirstEndpointState().getLportTag().toJava(); removeVpnLinkEndpointFlows(del, vpn2Uuid, rd1, interVpnLinkState.getSecondEndpointState().getDpId(), firstEndpointLportTag.intValue(), @@ -325,7 +333,7 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase interVpnLinkStateIid = InterVpnLinkUtil.getInterVpnLinkStateIid(del.getName()); - ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(tx -> - tx.delete(LogicalDatastoreType.CONFIGURATION, interVpnLinkStateIid)), LOG, - "Error deleting inter-VPN link state {}", interVpnLinkStateIid); + ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> + tx.delete(interVpnLinkStateIid)), LOG, "Error deleting inter-VPN link state {}", interVpnLinkStateIid); } // We're catching Exception here to continue deleting as much as possible // TODO Rework this so it's done in one transaction @SuppressWarnings("checkstyle:IllegalCatch") - private void removeVpnLinkEndpointFlows(InterVpnLink del, String vpnUuid, String rd, List dpns, + private void removeVpnLinkEndpointFlows(InterVpnLink del, String vpnUuid, String rd, List dpns, int otherEndpointLportTag, String otherEndpointIpAddr, List vrfEntries, final boolean isVpnFirstEndPoint) { @@ -378,18 +385,18 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase> result = idManager.allocateId(getIdInput); RpcResult rpcResult = result.get(); if (rpcResult.isSuccessful()) { - return rpcResult.getResult().getIdValue(); + return rpcResult.getResult().getIdValue().toJava(); } else { LOG.warn("RPC Call to Get Unique Id returned with Errors {}", rpcResult.getErrors()); } @@ -458,9 +466,8 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase - tx.put(LogicalDatastoreType.CONFIGURATION, vpnLinkStateIid, vpnLinkErrorState, - WriteTransaction.CREATE_MISSING_PARENTS)), + ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION, tx -> + tx.put(vpnLinkStateIid, vpnLinkErrorState, CREATE_MISSING_PARENTS)), LOG, "Error storing the VPN link error state for {}, {}", vpnLinkStateIid, vpnLinkErrorState); // Sending out an error Notification