From 69d56952f906374c581fdc9c685a15bb674c1178 Mon Sep 17 00:00:00 2001 From: Stephen Kitt Date: Fri, 25 Jan 2019 09:53:24 +0100 Subject: [PATCH] vpnmanager: drop nullToEmpty and reqNonNullOrElse Change-Id: I411e862b386ed14d759a2ab7cff089ce8f16a64f Signed-off-by: Stephen Kitt --- .../CentralizedSwitchChangeListener.java | 4 +- .../vpnmanager/DpnInVpnChangeListener.java | 4 +- .../InterfaceStateChangeListener.java | 22 +++--- ...bnetRouteInterfaceStateChangeListener.java | 13 ++-- .../SubnetRoutePacketInHandler.java | 51 +++++++------- .../TunnelInterfaceStateListener.java | 5 +- .../vpnmanager/VpnInstanceListener.java | 8 +-- .../vpnmanager/VpnInterfaceManager.java | 69 +++++++++---------- .../vpnmanager/VpnInterfaceOpListener.java | 7 +- .../netvirt/vpnmanager/VpnManagerImpl.java | 15 ++-- .../vpnmanager/VpnOpStatusListener.java | 5 +- .../netvirt/vpnmanager/VpnUtil.java | 56 +++++++-------- .../intervpnlink/IVpnLinkServiceImpl.java | 9 +-- .../intervpnlink/InterVpnLinkCacheImpl.java | 9 +-- .../LearntVpnVipToPortEventProcessor.java | 15 ++-- 15 files changed, 120 insertions(+), 172 deletions(-) diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/CentralizedSwitchChangeListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/CentralizedSwitchChangeListener.java index 0038ad42f1..d9e5f91d23 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/CentralizedSwitchChangeListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/CentralizedSwitchChangeListener.java @@ -9,10 +9,8 @@ package org.opendaylight.netvirt.vpnmanager; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import java.math.BigInteger; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.concurrent.ExecutionException; @@ -141,7 +139,7 @@ public class CentralizedSwitchChangeListener return; } - for (ExternalIps extIp : requireNonNullElse(router.getExternalIps(), Collections.emptyList())) { + for (ExternalIps extIp : router.nonnullExternalIps()) { Uuid subnetVpnName = extIp.getSubnetId(); if (addOrRemove == NwConstants.ADD_FLOW) { vpnManager.addRouterGwMacFlow(routerName, extGwMacAddress, primarySwitchId, extNetworkId, diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/DpnInVpnChangeListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/DpnInVpnChangeListener.java index 88719ad746..fdf96dc1ab 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/DpnInVpnChangeListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/DpnInVpnChangeListener.java @@ -7,9 +7,7 @@ */ package org.opendaylight.netvirt.vpnmanager; -import static java.util.Collections.emptyList; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import com.google.common.base.Optional; import java.math.BigInteger; @@ -72,7 +70,7 @@ public class DpnInVpnChangeListener implements OdlL3vpnListener { SingleTransactionDataBroker.syncReadOptional(dataBroker, LogicalDatastoreType.OPERATIONAL, id); if (vpnOpValue.isPresent()) { VpnInstanceOpDataEntry vpnInstOpData = vpnOpValue.get(); - List vpnToDpnList = requireNonNullElse(vpnInstOpData.getVpnToDpnList(), emptyList()); + List vpnToDpnList = vpnInstOpData.nonnullVpnToDpnList(); boolean flushDpnsOnVpn = true; for (VpnToDpnList dpn : vpnToDpnList) { if (dpn.getDpnState() == VpnToDpnList.DpnState.Active) { diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/InterfaceStateChangeListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/InterfaceStateChangeListener.java index c06fc1c2d6..8af6870843 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/InterfaceStateChangeListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/InterfaceStateChangeListener.java @@ -9,7 +9,6 @@ package org.opendaylight.netvirt.vpnmanager; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.collect.HashBasedTable; @@ -18,10 +17,8 @@ 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.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -30,7 +27,6 @@ import java.util.Set; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Singleton; - import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase; @@ -140,8 +136,7 @@ public class InterfaceStateChangeListener final VpnInterface vpnIf = vpnUtil.getConfiguredVpnInterface(interfaceName); if (vpnIf != null) { for (VpnInstanceNames vpnInterfaceVpnInstance : - requireNonNullElse(vpnIf.getVpnInstanceNames(), - Collections.emptyList())) { + vpnIf.nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); String primaryRd = vpnUtil.getPrimaryRd(vpnName); if (!vpnInterfaceManager.isVpnInstanceReady(vpnName)) { @@ -226,8 +221,7 @@ public class InterfaceStateChangeListener return; } for (VpnInstanceNames vpnInterfaceVpnInstance : - requireNonNullElse(cfgVpnInterface.getVpnInstanceNames(), - Collections.emptyList())) { + cfgVpnInterface.nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); Optional optVpnInterface = vpnUtil.getVpnInterfaceOpDataEntry(ifName, vpnName); @@ -304,10 +298,10 @@ public class InterfaceStateChangeListener original.getOperStatus(), update.getOperStatus()); return; } - if (state.equals(IntfTransitionState.STATE_UP)) { + if (state.equals(IntfTransitionState.STATE_UP) + && vpnIf.getVpnInstanceNames() != null) { for (VpnInstanceNames vpnInterfaceVpnInstance : - requireNonNullElse(vpnIf.getVpnInstanceNames(), - Collections.emptyList())) { + vpnIf.getVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); String primaryRd = vpnUtil.getPrimaryRd(vpnName); Set prefixes = new HashSet<>(); @@ -328,10 +322,10 @@ public class InterfaceStateChangeListener mapOfRdAndPrefixesForRefreshFib.put(primaryRd, prefixes); } } - } else if (state.equals(IntfTransitionState.STATE_DOWN)) { + } else if (state.equals(IntfTransitionState.STATE_DOWN) + && vpnIf.getVpnInstanceNames() != null) { for (VpnInstanceNames vpnInterfaceVpnInstance : - requireNonNullElse(vpnIf.getVpnInstanceNames(), - Collections.emptyList())) { + vpnIf.getVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); LOG.info("VPN Interface update event - intfName {} " + " onto vpnName {} running oper-driven DOWN", diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRouteInterfaceStateChangeListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRouteInterfaceStateChangeListener.java index ae5d290521..1b87cf5669 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRouteInterfaceStateChangeListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRouteInterfaceStateChangeListener.java @@ -7,13 +7,10 @@ */ package org.opendaylight.netvirt.vpnmanager; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; - import com.google.common.base.Optional; import com.google.common.util.concurrent.ListenableFuture; import java.math.BigInteger; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.PostConstruct; @@ -165,9 +162,8 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange return futures; } boolean interfaceDownEligible = false; - for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse( - cfgVpnInterface.get().getVpnInstanceNames(), - Collections.emptyList())) { + for (VpnInstanceNames vpnInterfaceVpnInstance : + cfgVpnInterface.get().nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); InstanceIdentifier idOper = VpnUtil .getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName); @@ -232,9 +228,8 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange return futures; } boolean interfaceChangeEligible = false; - for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse( - cfgVpnInterface.get().getVpnInstanceNames(), - Collections.emptyList())) { + for (VpnInstanceNames vpnInterfaceVpnInstance : + cfgVpnInterface.get().nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); InstanceIdentifier idOper = VpnUtil .getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName); diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java index fa9443403e..d2999f300c 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java @@ -7,9 +7,6 @@ */ package org.opendaylight.netvirt.vpnmanager; -import static java.util.Collections.emptyList; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; - import com.google.common.base.Optional; import com.google.common.primitives.Ints; import java.math.BigInteger; @@ -405,33 +402,35 @@ public class SubnetRoutePacketInHandler implements PacketProcessingListener { elanInfo.getName()); return null; } - List subnetList = requireNonNullElse(optionalNetworkMap.get().getSubnetIdList(), emptyList()); + List subnetList = optionalNetworkMap.get().getSubnetIdList(); LOG.debug("{} getTargetDpnForPacketOut: Obtained subnetList as {} for network {}", LOGGING_PREFIX, subnetList, elanInfo.getName()); - for (Uuid subnetId : subnetList) { - String vpnName = null; - Subnetmap sn = vpnUtil.getSubnetmapFromItsUuid(subnetId); - if (sn != null && sn.getVpnId() != null) { - vpnName = sn.getVpnId().getValue(); - } - if (vpnName == null) { - continue; - } - Optional optionalSubs; - optionalSubs = SingleTransactionDataBroker.syncReadOptional(dataBroker, + if (subnetList != null) { + for (Uuid subnetId : subnetList) { + String vpnName = null; + Subnetmap sn = vpnUtil.getSubnetmapFromItsUuid(subnetId); + if (sn != null && sn.getVpnId() != null) { + vpnName = sn.getVpnId().getValue(); + } + if (vpnName == null) { + continue; + } + Optional optionalSubs = SingleTransactionDataBroker.syncReadOptional(dataBroker, LogicalDatastoreType.OPERATIONAL, VpnUtil.buildSubnetOpDataEntryInstanceIdentifier(subnetId)); - if (!optionalSubs.isPresent()) { - continue; - } - SubnetOpDataEntry subOpEntry = optionalSubs.get(); - if (subOpEntry.getNhDpnId() != null) { - LOG.trace("{} getTargetDpnForPacketOut: Viewing Subnet {}", LOGGING_PREFIX, subnetId.getValue()); - IpPrefix cidr = IpPrefixBuilder.getDefaultInstance(subOpEntry.getSubnetCidr()); - boolean match = NWUtil.isIpAddressInRange(IpAddressBuilder.getDefaultInstance(ipAddress), cidr); - LOG.trace("{} getTargetDpnForPacketOut: Viewing Subnet {} matching {}", LOGGING_PREFIX, + if (!optionalSubs.isPresent()) { + continue; + } + SubnetOpDataEntry subOpEntry = optionalSubs.get(); + if (subOpEntry.getNhDpnId() != null) { + LOG.trace("{} getTargetDpnForPacketOut: Viewing Subnet {}", LOGGING_PREFIX, + subnetId.getValue()); + IpPrefix cidr = IpPrefixBuilder.getDefaultInstance(subOpEntry.getSubnetCidr()); + boolean match = NWUtil.isIpAddressInRange(IpAddressBuilder.getDefaultInstance(ipAddress), cidr); + LOG.trace("{} getTargetDpnForPacketOut: Viewing Subnet {} matching {}", LOGGING_PREFIX, subnetId.getValue(), match); - if (match) { - return subOpEntry; + if (match) { + return subOpEntry; + } } } } diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java index fef94d9a83..37b34bb542 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java @@ -11,7 +11,6 @@ import static java.util.Collections.emptyList; import static java.util.stream.Collectors.toList; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.base.Strings; @@ -305,7 +304,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas + " destTepIP {} returned with Errors {}", srcDpnId, srcTepIp, destTepIp, rpcResult.getErrors()); } else { - srcDpninterfacelist = requireNonNullElse(rpcResult.getResult().getInterfaces(), emptyList()); + srcDpninterfacelist = rpcResult.getResult().nonnullInterfaces(); } } catch (Exception e) { LOG.error("handleTunnelEventForDPN: Exception when querying for GetDpnInterfaceList for srcDpnid {}" @@ -323,7 +322,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas + " srcTepIP {} destTepIp {} returned with Errors {}", remoteDpnId, srcTepIp, destTepIp, rpcResult.getErrors()); } else { - destDpninterfacelist = requireNonNullElse(rpcResult.getResult().getInterfaces(), emptyList()); + destDpninterfacelist = rpcResult.getResult().nonnullInterfaces(); } } catch (Exception e) { LOG.error("handleTunnelEventForDPN: Exception when querying for GetDpnInterfaceList" diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java index 8a3d491f81..1133f3ed1f 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java @@ -7,11 +7,9 @@ */ package org.opendaylight.netvirt.vpnmanager; -import static java.util.Collections.emptyList; import static org.opendaylight.controller.md.sal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; @@ -431,15 +429,13 @@ public class VpnInstanceListener extends AsyncDataTreeChangeListenerBase dcGatewayIps = - requireNonNullElse(dcGatewayIpListOptional.get().getDcGatewayIp(), emptyList()); + List dcGatewayIps = dcGatewayIpListOptional.get().nonnullDcGatewayIp(); InstanceIdentifier externalTunnelListId = InstanceIdentifier .create(ExternalTunnelList.class); Optional externalTunnelListOptional = SingleTransactionDataBroker.syncReadOptional( dataBroker, LogicalDatastoreType.OPERATIONAL, externalTunnelListId); if (externalTunnelListOptional.isPresent()) { - List externalTunnels = - requireNonNullElse(externalTunnelListOptional.get().getExternalTunnel(), emptyList()); + List externalTunnels = externalTunnelListOptional.get().nonnullExternalTunnel(); List externalTunnelIpList = new ArrayList<>(); for (ExternalTunnel externalTunnel: externalTunnels) { externalTunnelIpList.add(externalTunnel.getDestinationDevice()); diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java index cbdc4f542d..6fc437a9fe 100755 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java @@ -11,7 +11,6 @@ import static java.util.Collections.emptyList; import static org.opendaylight.controller.md.sal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.base.Preconditions; @@ -94,7 +93,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev15033 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.label.route.map.LabelRouteInfoBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.label.route.map.LabelRouteInfoKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentrybase.RoutePaths; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.AdjacenciesOp; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.NeutronRouterDpns; @@ -235,8 +233,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase identifier, final VpnInterface vpnInterface, final @Nullable List oldAdjs, final @Nullable List newAdjs) { - for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(vpnInterface.getVpnInstanceNames(), - Collections.emptyList())) { + for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInterface.nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); addVpnInterfaceCall(identifier, vpnInterface, oldAdjs, newAdjs, vpnName); } @@ -517,7 +514,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase adjacencies = requireNonNullElse(optAdjacencies.get().getAdjacency(), emptyList()); + List adjacencies = optAdjacencies.get().nonnullAdjacency(); for (Adjacency adjacency : adjacencies) { if (adjacency.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) { continue; @@ -706,11 +703,10 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBaseemptyList())) { + for (String nh : nextHop.getNextHopIpList()) { deleteExtraRouteFromCurrentAndImportingVpns( vpnName, nextHop.getIpAddress(), nh, allocatedRd, interfaceName, writeConfigTxn, writeOperTx); @@ -1191,29 +1187,28 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBaseemptyList()).forEach(routePath -> { - String nh = routePath.getNexthopAddress(); - int label = routePath.getLabel().intValue(); - if (FibHelper.isControllerManagedVpnInterfaceRoute(RouteOrigin.value( - vrfEntry.getOrigin()))) { - LOG.info( - "handleVpnsExportingRoutesImporting: Importing fib entry rd {}" - + " prefix {} nexthop {} label {} to vpn {} vpnRd {}", - vpn.getVrfId(), prefix, nh, label, vpnName, vpnRd); - fibManager.addOrUpdateFibEntry(vpnRd, null /*macAddress*/, prefix, - Collections.singletonList(nh), VrfEntry.EncapType.Mplsgre, label, - 0 /*l3vni*/, gwMac, vpn.getVrfId(), RouteOrigin.SELF_IMPORTED, - confTx); - } else { - LOG.info("handleVpnsExportingRoutes: Importing subnet route fib entry" - + " rd {} prefix {} nexthop {} label {} to vpn {} vpnRd {}", - vpn.getVrfId(), prefix, nh, label, vpnName, vpnRd); - SubnetRoute route = vrfEntry.augmentation(SubnetRoute.class); - importSubnetRouteForNewVpn(vpnRd, prefix, nh, label, route, vpn.getVrfId(), - confTx); - } - }); + vrfEntry.nonnullRoutePaths().forEach(routePath -> { + String nh = routePath.getNexthopAddress(); + int label = routePath.getLabel().intValue(); + if (FibHelper.isControllerManagedVpnInterfaceRoute(RouteOrigin.value( + vrfEntry.getOrigin()))) { + LOG.info( + "handleVpnsExportingRoutesImporting: Importing fib entry rd {}" + + " prefix {} nexthop {} label {} to vpn {} vpnRd {}", + vpn.getVrfId(), prefix, nh, label, vpnName, vpnRd); + fibManager.addOrUpdateFibEntry(vpnRd, null /*macAddress*/, prefix, + Collections.singletonList(nh), VrfEntry.EncapType.Mplsgre, label, + 0 /*l3vni*/, gwMac, vpn.getVrfId(), RouteOrigin.SELF_IMPORTED, + confTx); + } else { + LOG.info("handleVpnsExportingRoutes: Importing subnet route fib entry" + + " rd {} prefix {} nexthop {} label {} to vpn {} vpnRd {}", + vpn.getVrfId(), prefix, nh, label, vpnName, vpnRd); + SubnetRoute route = vrfEntry.augmentation(SubnetRoute.class); + importSubnetRouteForNewVpn(vpnRd, prefix, nh, label, route, vpn.getVrfId(), + confTx); + } + }); } catch (RuntimeException e) { LOG.error("getNextHopAddressList: Exception occurred while importing route with rd {}" + " prefix {} routePaths {} to vpn {} vpnRd {}", vpn.getVrfId(), @@ -1233,8 +1228,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBaseemptyList())) { + for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInterface.nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); removeVpnInterfaceCall(identifier, vpnInterface, vpnName, interfaceName); } @@ -1766,8 +1760,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase(); final BigInteger dpnId = InterfaceUtils.getDpnForInterface(ifaceMgrRpcService, vpnInterfaceName); - for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(update.getVpnInstanceNames(), - Collections.emptyList())) { + for (VpnInstanceNames vpnInterfaceVpnInstance : update.nonnullVpnInstanceNames()) { String newVpnName = vpnInterfaceVpnInstance.getVpnName(); List copyNewAdjs = new ArrayList<>(newAdjs); List copyOldAdjs = new ArrayList<>(oldAdjs); @@ -2148,7 +2141,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase adjsList = requireNonNullElse(adjs.getAdjacency(), emptyList()); + List adjsList = adjs.nonnullAdjacency(); for (Adjacency adj : adjsList) { if (adj.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) { String primaryInterfaceIp = adj.getIpAddress(); @@ -2323,8 +2316,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase operationVpnAdjacencies = requireNonNullElse(vpnInterfaceOptional.get() - .augmentation(AdjacenciesOp.class).getAdjacency(), emptyList()); + List operationVpnAdjacencies = vpnInterfaceOptional.get() + .augmentation(AdjacenciesOp.class).nonnullAdjacency(); // Due to insufficient rds, some of the extra route wont get processed when it is added. // The unprocessed adjacencies will be present in config vpn interface DS but will be missing // in operational DS. These unprocessed adjacencies will be handled below. diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceOpListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceOpListener.java index c92ecffb69..c0a58959b3 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceOpListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceOpListener.java @@ -7,8 +7,6 @@ */ package org.opendaylight.netvirt.vpnmanager; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; - import com.google.common.base.Optional; import java.util.ArrayList; import java.util.Collections; @@ -152,9 +150,8 @@ public class VpnInterfaceOpListener extends AsyncDataTreeChangeListenerBaseemptyList())) { + if (prefixToInterfaceLocal.isEmpty() && adjacency.getNextHopIpList() != null) { + for (String nh : adjacency.getNextHopIpList()) { prefix = SingleTransactionDataBroker.syncReadOptional(dataBroker, LogicalDatastoreType.OPERATIONAL, VpnUtil.getPrefixToInterfaceIdentifier( vpnInstOp.getVpnId(), VpnUtil.getIpPrefix(nh))); diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnManagerImpl.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnManagerImpl.java index 3a8192124f..9c319a139f 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnManagerImpl.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnManagerImpl.java @@ -7,8 +7,6 @@ */ package org.opendaylight.netvirt.vpnmanager; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; - import com.google.common.base.Optional; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.math.BigInteger; @@ -26,7 +24,6 @@ import javax.annotation.Nullable; import javax.annotation.PostConstruct; 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.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -474,11 +471,13 @@ public class VpnManagerImpl implements IVpnManager { } String extIfc = null; - for (String dpnInterface : requireNonNullElse(dpnInterfaces.getInterfaces(), - Collections.emptyList())) { - if (interfaceManager.isExternalInterface(dpnInterface)) { - extIfc = dpnInterface; - break; + @Nullable List interfaces = dpnInterfaces.getInterfaces(); + if (interfaces != null) { + for (String dpnInterface : interfaces) { + if (interfaceManager.isExternalInterface(dpnInterface)) { + extIfc = dpnInterface; + break; + } } } diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnOpStatusListener.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnOpStatusListener.java index 29d60cd6c2..f0ceef259b 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnOpStatusListener.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnOpStatusListener.java @@ -8,7 +8,6 @@ package org.opendaylight.netvirt.vpnmanager; import static java.util.Collections.emptyList; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; @@ -109,7 +108,7 @@ public class VpnOpStatusListener extends AsyncDataTreeChangeListenerBase rds = requireNonNullElse(update.getRd(), emptyList()); + final List rds = update.getRd(); String primaryRd = update.getVrfId(); final long vpnId = vpnUtil.getVpnId(vpnName); jobCoordinator.enqueueJob("VPN-" + update.getVpnInstanceName(), () -> { @@ -118,7 +117,7 @@ public class VpnOpStatusListener extends AsyncDataTreeChangeListenerBase operationalFuture = txRunner.callWithNewWriteOnlyTransactionAndSubmit( Datastore.OPERATIONAL, operTx -> { // Clean up VPNExtraRoutes Operational DS - if (VpnUtil.isBgpVpn(vpnName, primaryRd)) { + if (rds != null && VpnUtil.isBgpVpn(vpnName, primaryRd)) { if (update.getType() == VpnInstanceOpDataEntry.Type.L2) { rds.parallelStream().forEach(rd -> bgpManager.deleteVrf( rd, false, AddressFamily.L2VPN)); diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java index 856d02eff7..00c990f569 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java @@ -9,7 +9,6 @@ package org.opendaylight.netvirt.vpnmanager; import static java.util.Collections.emptyList; -import static java.util.Objects.requireNonNull; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; import com.google.common.base.Optional; @@ -154,7 +153,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev15033 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.fibentries.VrfTablesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentrybase.RoutePaths; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3nexthop.rev150409.L3nexthop; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3nexthop.rev150409.l3nexthop.VpnNexthops; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3nexthop.rev150409.l3nexthop.VpnNexthopsKey; @@ -630,8 +628,7 @@ public final class VpnUtil { ListenableFutures.addErrorLogging( new ManagedNewTransactionRunnerImpl(dataBroker).callWithNewWriteOnlyTransactionAndSubmit( Datastore.CONFIGURATION, tx -> { - for (VrfEntry vrfEntry : requireNonNullElse(vrfTables.getVrfEntry(), - Collections.emptyList())) { + for (VrfEntry vrfEntry : vrfTables.nonnullVrfEntry()) { if (origin == RouteOrigin.value(vrfEntry.getOrigin())) { tx.delete(vpnVrfTableIid.child(VrfEntry.class, vrfEntry.key())); } @@ -647,8 +644,8 @@ public final class VpnUtil { List matches = new ArrayList<>(); if (vrfTablesOpc.isPresent()) { VrfTables vrfTables = vrfTablesOpc.get(); - for (VrfEntry vrfEntry : requireNonNullElse(vrfTables.getVrfEntry(), Collections.emptyList())) { - requireNonNullElse(vrfEntry.getRoutePaths(), Collections.emptyList()).stream() + for (VrfEntry vrfEntry : vrfTables.nonnullVrfEntry()) { + vrfEntry.nonnullRoutePaths().stream() .filter(routePath -> routePath.getNexthopAddress() != null && routePath.getNexthopAddress() .equals(nexthop)).findFirst().ifPresent(routePath -> matches.add(vrfEntry)); } @@ -1152,9 +1149,8 @@ public final class VpnUtil { String routerName = null; - for (Routers routerData : requireNonNullElse(extRouterData.get().getRouters(), - Collections.emptyList())) { - List externalIps = requireNonNullElse(routerData.getExternalIps(), emptyList()); + for (Routers routerData : extRouterData.get().nonnullRouters()) { + List externalIps = routerData.nonnullExternalIps(); for (ExternalIps externalIp : externalIps) { if (Objects.equals(externalIp.getIpAddress(), extIp)) { routerName = routerData.getRouterName(); @@ -1167,9 +1163,8 @@ public final class VpnUtil { return routerName; } - for (Routers routerData : requireNonNullElse(extRouterData.get().getRouters(), - Collections.emptyList())) { - List externalIps = requireNonNullElse(routerData.getExternalIps(), emptyList()); + for (Routers routerData : extRouterData.get().nonnullRouters()) { + List externalIps = routerData.nonnullExternalIps(); for (ExternalIps externalIp : externalIps) { Subnet neutronSubnet = neutronVpnService.getNeutronSubnet(externalIp.getSubnetId()); if (neutronSubnet == null) { @@ -1192,21 +1187,23 @@ public final class VpnUtil { InstanceIdentifier extRouterInstanceIndentifier = InstanceIdentifier.builder(ExtRouters.class).build(); Optional extRouterData = read(LogicalDatastoreType.CONFIGURATION, extRouterInstanceIndentifier); - if (!extRouterData.isPresent()) { + if (!extRouterData.isPresent() || extRouterData.get().getRouters() == null) { return null; } - for (Routers routerData : requireNonNullElse(extRouterData.get().getRouters(), - Collections.emptyList())) { - List externalIps = requireNonNullElse(routerData.getExternalIps(), emptyList()); - for (ExternalIps externalIp : externalIps) { - Subnet neutronSubnet = neutronVpnService.getNeutronSubnet(externalIp.getSubnetId()); - if (neutronSubnet == null) { - LOG.warn("Failed to retrieve subnet {} referenced by router {}", + for (Routers routerData : extRouterData.get().getRouters()) { + List externalIps = routerData.getExternalIps(); + if (externalIps != null) { + for (ExternalIps externalIp : externalIps) { + Subnet neutronSubnet = neutronVpnService.getNeutronSubnet(externalIp.getSubnetId()); + if (neutronSubnet == null) { + LOG.warn("Failed to retrieve subnet {} referenced by router {}", externalIp.getSubnetId(), routerData); - continue; - } - if (NWUtil.isIpAddressInRange(IpAddressBuilder.getDefaultInstance(extIp), neutronSubnet.getCidr())) { - return neutronSubnet.getUuid().getValue(); + continue; + } + if (NWUtil.isIpAddressInRange(IpAddressBuilder.getDefaultInstance(extIp), + neutronSubnet.getCidr())) { + return neutronSubnet.getUuid().getValue(); + } } } } @@ -1967,8 +1964,7 @@ public final class VpnUtil { Optional dpnInElanInterfaces = read(LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId); if (dpnInElanInterfaces.isPresent()) { - List dpnInterfaces = - requireNonNullElse(dpnInElanInterfaces.get().getDpnInterfaces(), emptyList()); + List dpnInterfaces = dpnInElanInterfaces.get().nonnullDpnInterfaces(); for (DpnInterfaces dpnInterface : dpnInterfaces) { dpnIdSet.add(dpnInterface.getDpId()); } @@ -2337,7 +2333,7 @@ public final class VpnUtil { } public static List getVpnListForVpnInterface(VpnInterface vpnInter) { - return requireNonNullElse(vpnInter.getVpnInstanceNames(), Collections.emptyList()).stream() + return vpnInter.nonnullVpnInstanceNames().stream() .map(VpnInstanceNames::getVpnName).collect(Collectors.toList()); } @@ -2363,12 +2359,6 @@ public final class VpnUtil { }); } - // Use Objects.requireNonNullElse instead with JDK9+ - @Nonnull - public static T requireNonNullElse(@Nullable T obj, @Nonnull T defaultObj) { - return obj != null ? obj : requireNonNull(defaultObj); - } - public static boolean isDualRouterVpnUpdate(List oldVpnListCopy, List newVpnListCopy) { return oldVpnListCopy.size() == 2 && newVpnListCopy.size() == 3 || oldVpnListCopy.size() == 3 && newVpnListCopy.size() == 2; diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/IVpnLinkServiceImpl.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/IVpnLinkServiceImpl.java index c5f05d9c74..ed744e551f 100755 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/IVpnLinkServiceImpl.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/IVpnLinkServiceImpl.java @@ -7,9 +7,7 @@ */ package org.opendaylight.netvirt.vpnmanager.intervpnlink; -import static java.util.Collections.emptyList; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.base.Preconditions; @@ -53,7 +51,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev15033 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntryKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentrybase.RoutePaths; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.VpnMaps; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.vpnmaps.VpnMap; import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.l3.attributes.Routes; @@ -312,7 +309,7 @@ public class IVpnLinkServiceImpl implements IVpnLinkService, AutoCloseable { String vpn2Endpoint = vpnLink.getOtherEndpointIpAddr(vpn2Uuid); List allVpnVrfEntries = vpnUtil.getAllVrfEntries(vpn1Rd); for (VrfEntry vrfEntry : allVpnVrfEntries) { - requireNonNullElse(vrfEntry.getRoutePaths(), Collections.emptyList()).stream() + vrfEntry.nonnullRoutePaths().stream() .filter(routePath -> Objects.equals(routePath.getNexthopAddress(), vpn2Endpoint)) .forEach(routePath -> { // Vpn1 has a route pointing to Vpn2's endpoint. Forcing the leaking of the route will update @@ -359,7 +356,7 @@ public class IVpnLinkServiceImpl implements IVpnLinkService, AutoCloseable { return new HashMap<>(); } Map vmap = new HashMap<>(); - final List VpnMapList = requireNonNullElse(optVpnMaps.get().getVpnMap(), emptyList()); + final List VpnMapList = optVpnMaps.get().nonnullVpnMap(); for (VpnMap map : VpnMapList) { if (map.getRouterIds() == null) { continue; @@ -395,7 +392,7 @@ public class IVpnLinkServiceImpl implements IVpnLinkService, AutoCloseable { return; } - List routers = requireNonNullElse(routerOpData.get().getRouter(), emptyList()); + List routers = routerOpData.get().nonnullRouter(); for (Router router : routers) { String vpnId = routerXL3VpnMap.get(router.getUuid().getValue()); if (vpnId == null) { diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkCacheImpl.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkCacheImpl.java index 973c7853f7..2fbf2c1022 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkCacheImpl.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkCacheImpl.java @@ -8,11 +8,8 @@ package org.opendaylight.netvirt.vpnmanager.intervpnlink; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; - import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; -import java.util.Collections; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -71,8 +68,7 @@ public class InterVpnLinkCacheImpl implements InterVpnLinkCache { return; // Nothing to be added to cache } InterVpnLinks interVpnLinks = optIVpnLinksOpData.get(); - for (InterVpnLink interVpnLink : requireNonNullElse(interVpnLinks.getInterVpnLink(), - Collections.emptyList())) { + for (InterVpnLink interVpnLink : interVpnLinks.nonnullInterVpnLink()) { addInterVpnLinkToCaches(interVpnLink); } @@ -86,8 +82,7 @@ public class InterVpnLinkCacheImpl implements InterVpnLinkCache { return; } InterVpnLinkStates interVpnLinkStates = optIVpnLinkStateOpData.get(); - for (InterVpnLinkState interVpnLinkState : requireNonNullElse(interVpnLinkStates.getInterVpnLinkState(), - Collections.emptyList())) { + for (InterVpnLinkState interVpnLinkState : interVpnLinkStates.nonnullInterVpnLinkState()) { addInterVpnLinkStateToCaches(interVpnLinkState); } } diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java index ad34ef92e0..1b9d080101 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java @@ -7,9 +7,6 @@ */ package org.opendaylight.netvirt.vpnmanager.iplearn; -import static java.util.Collections.emptyList; -import static org.opendaylight.netvirt.vpnmanager.VpnUtil.requireNonNullElse; - import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.util.concurrent.ListenableFuture; @@ -264,11 +261,13 @@ public class LearntVpnVipToPortEventProcessor VpnPortipToPort vpnPortipToPort = vpnUtil.getNeutronPortFromVpnPortFixedIp(vpnInstName, ip); if (vpnPortipToPort != null && vpnPortipToPort.isSubnetIp()) { - List adjacencies = requireNonNullElse(vpnUtil.getAdjacenciesForVpnInterfaceFromConfig( - vpnPortipToPort.getPortName()), emptyList()); - for (Adjacency adjacency : adjacencies) { - if (adjacency.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) { - return adjacency.getSubnetId().getValue(); + List adjacencies = + vpnUtil.getAdjacenciesForVpnInterfaceFromConfig(vpnPortipToPort.getPortName()); + if (adjacencies != null) { + for (Adjacency adjacency : adjacencies) { + if (adjacency.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) { + return adjacency.getSubnetId().getValue(); + } } } } -- 2.36.6