From 4c0596412b61edf4217315f40caaf8042c65cc39 Mon Sep 17 00:00:00 2001 From: Stephen Kitt Date: Fri, 25 Jan 2019 09:53:23 +0100 Subject: [PATCH] natservice: drop nullToEmpty and reqNonNullOrElse Change-Id: Ie2cce99b07dd4ad5ed5b25450838ae6e9d89bdb0 Signed-off-by: Stephen Kitt --- .../cli/DisplayNaptSwithcesCli.java | 4 +- .../internal/AbstractSnatService.java | 28 +- .../internal/ConntrackBasedSnatService.java | 9 +- .../internal/EvpnDnatFlowProgrammer.java | 7 +- .../ExternalNetworksChangeListener.java | 260 +++++++++--------- .../internal/ExternalRoutersListener.java | 39 ++- .../internal/NAPTSwitchSelector.java | 6 +- .../natservice/internal/NaptManager.java | 9 +- .../NatInterfaceStateChangeListener.java | 10 +- .../internal/NatSouthboundEventHandlers.java | 9 +- .../NatTunnelInterfaceStateListener.java | 12 +- .../netvirt/natservice/internal/NatUtil.java | 39 +-- .../internal/NatVpnMapsChangeListener.java | 12 +- .../internal/UpgradeStateListener.java | 9 +- .../rpcservice/NatRpcServiceImpl.java | 24 +- 15 files changed, 205 insertions(+), 272 deletions(-) diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/cli/DisplayNaptSwithcesCli.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/cli/DisplayNaptSwithcesCli.java index c7c4af00c0..53734cbef0 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/cli/DisplayNaptSwithcesCli.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/cli/DisplayNaptSwithcesCli.java @@ -11,7 +11,6 @@ package org.opendaylight.netvirt.natservice.cli; import com.google.common.base.Optional; import java.io.PrintStream; import java.math.BigInteger; -import java.util.Collections; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.apache.karaf.shell.commands.Command; @@ -49,8 +48,7 @@ public class DisplayNaptSwithcesCli extends OsgiCommandSupport { ps.printf(String.format(" %-36s %-20s %-20s %n", "Router Id ", "Datapath Node Id", "Managment Ip Address")); ps.printf("-------------------------------------------------------------------------------------------%n"); if (npatSwitches.isPresent()) { - for (RouterToNaptSwitch routerToNaptSwitch : NatUtil.requireNonNullElse( - npatSwitches.get().getRouterToNaptSwitch(), Collections.emptyList())) { + for (RouterToNaptSwitch routerToNaptSwitch : npatSwitches.get().nonnullRouterToNaptSwitch()) { ps.printf(String.format(" %-36s %-20s %-20s %n", routerToNaptSwitch.getRouterName(), routerToNaptSwitch.getPrimarySwitchId(), getDpnLocalIp(routerToNaptSwitch.getPrimarySwitchId()))); } diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/AbstractSnatService.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/AbstractSnatService.java index a1f840655c..ed0b368c97 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/AbstractSnatService.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/AbstractSnatService.java @@ -8,7 +8,6 @@ package org.opendaylight.netvirt.natservice.internal; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; import java.math.BigInteger; import java.time.Duration; @@ -290,8 +289,7 @@ public abstract class AbstractSnatService implements SnatServiceListener { addDefaultFibRouteForSNAT(confTx, dpnId, routerId); int elanId = NatUtil.getElanInstanceByName(routers.getNetworkId().getValue(), getDataBroker()) .getElanTag().intValue(); - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; @@ -309,8 +307,7 @@ public abstract class AbstractSnatService implements SnatServiceListener { String routerName = routers.getRouterName(); Long routerId = NatUtil.getVpnId(dataBroker, routerName); removeDefaultFibRouteForSNAT(confTx, dpnId, routerId); - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; @@ -326,8 +323,7 @@ public abstract class AbstractSnatService implements SnatServiceListener { String routerName = routers.getRouterName(); Long routerId = NatUtil.getVpnId(dataBroker, routerName); String externalGwMac = routers.getExtGwMacAddress(); - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; @@ -344,8 +340,7 @@ public abstract class AbstractSnatService implements SnatServiceListener { Routers routers, BigInteger dpnId) throws ExecutionException, InterruptedException { String routerName = routers.getRouterName(); Long routerId = NatUtil.getVpnId(confTx, routerName); - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; @@ -628,8 +623,7 @@ public abstract class AbstractSnatService implements SnatServiceListener { protected void removeMipAdjacencies(Routers routers) { LOG.info("removeMipAdjacencies for router {}", routers.getRouterName()); String externalSubNetId = null; - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; @@ -648,13 +642,11 @@ public abstract class AbstractSnatService implements SnatServiceListener { VpnInterfaces vpnInterfaces = SingleTransactionDataBroker.syncRead(dataBroker, LogicalDatastoreType.CONFIGURATION, vpnInterfacesId); List updatedVpnInterface = new ArrayList<>(); - for (VpnInterface vpnInterface : requireNonNullElse(vpnInterfaces.getVpnInterface(), - Collections.emptyList())) { + for (VpnInterface vpnInterface : vpnInterfaces.nonnullVpnInterface()) { List updatedAdjacencies = new ArrayList<>(); Adjacencies adjacencies = vpnInterface.augmentation(Adjacencies.class); if (null != adjacencies) { - for (Adjacency adjacency : requireNonNullElse(adjacencies.getAdjacency(), - Collections.emptyList())) { + for (Adjacency adjacency : adjacencies.nonnullAdjacency()) { if (!adjacency.getSubnetId().getValue().equals(externalSubNetId)) { updatedAdjacencies.add(adjacency); } @@ -688,15 +680,13 @@ public abstract class AbstractSnatService implements SnatServiceListener { } LearntVpnVipToPortDataBuilder learntVpnVipToPortDataBuilder = new LearntVpnVipToPortDataBuilder(); List learntVpnVipToPortList = new ArrayList<>(); - for (LearntVpnVipToPort learntVpnVipToPort : requireNonNullElse(learntVpnVipToPortData.getLearntVpnVipToPort(), - Collections.emptyList())) { + for (LearntVpnVipToPort learntVpnVipToPort : learntVpnVipToPortData.nonnullLearntVpnVipToPort()) { if (!networkId.equals(learntVpnVipToPort.getVpnName())) { LOG.info("The learned port belongs to Vpn {} hence not removing", learntVpnVipToPort.getVpnName()); learntVpnVipToPortList.add(learntVpnVipToPort); } else { String externalSubNetId = null; - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ConntrackBasedSnatService.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ConntrackBasedSnatService.java index c1df577186..792b7f17fd 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ConntrackBasedSnatService.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ConntrackBasedSnatService.java @@ -7,12 +7,9 @@ */ package org.opendaylight.netvirt.natservice.internal; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; - import com.google.common.base.Optional; import java.math.BigInteger; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -98,8 +95,7 @@ public abstract class ConntrackBasedSnatService extends AbstractSnatService { String extGwMacAddress = NatUtil.getExtGwMacAddFromRouterName(confTx, routerName); addOutboundTblTrackEntry(confTx, dpnId, routerId, extGwMacAddress); - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; @@ -142,8 +138,7 @@ public abstract class ConntrackBasedSnatService extends AbstractSnatService { removeSnatMissEntryForPrimrySwch(confTx, dpnId, routerId); removeOutboundTblTrackEntry(confTx, dpnId, routerId); - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { if (!NWUtil.isIpv4Address(externalIp.getIpAddress())) { // In this class we handle only IPv4 use-cases. continue; diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/EvpnDnatFlowProgrammer.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/EvpnDnatFlowProgrammer.java index 56701ac75d..fff7562752 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/EvpnDnatFlowProgrammer.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/EvpnDnatFlowProgrammer.java @@ -11,7 +11,6 @@ package org.opendaylight.netvirt.natservice.internal; 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.natservice.internal.NatUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; @@ -227,8 +226,7 @@ public class EvpnDnatFlowProgrammer { LogicalDatastoreType.CONFIGURATION, vpnIfIdentifier); if (optionalVpnInterface.isPresent()) { ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, tx -> { - for (VpnInstanceNames vpnInstance : requireNonNullElse(optionalVpnInterface.get().getVpnInstanceNames(), - Collections.emptyList())) { + for (VpnInstanceNames vpnInstance : optionalVpnInterface.get().nonnullVpnInstanceNames()) { if (!vpnName.equals(vpnInstance.getVpnName())) { continue; } @@ -347,8 +345,7 @@ public class EvpnDnatFlowProgrammer { LogicalDatastoreType.CONFIGURATION, vpnIfIdentifier); if (optionalVpnInterface.isPresent()) { ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, tx -> { - for (VpnInstanceNames vpnInstance : requireNonNullElse(optionalVpnInterface.get().getVpnInstanceNames(), - Collections.emptyList())) { + for (VpnInstanceNames vpnInstance : optionalVpnInterface.get().nonnullVpnInstanceNames()) { if (!vpnName.equals(vpnInstance.getVpnName())) { continue; } diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalNetworksChangeListener.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalNetworksChangeListener.java index 71f1aeb460..487d1c991d 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalNetworksChangeListener.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalNetworksChangeListener.java @@ -8,7 +8,6 @@ package org.opendaylight.netvirt.natservice.internal; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; import com.google.common.base.Optional; import java.math.BigInteger; @@ -135,160 +134,169 @@ public class ExternalNetworksChangeListener } private void removeSnatEntries(Networks original, Uuid networkUuid) { - for (Uuid routerUuid : requireNonNullElse(original.getRouterIds(), Collections.emptyList())) { - long routerId = NatUtil.getVpnId(dataBroker, routerUuid.getValue()); - if (routerId == NatConstants.INVALID_ID) { - LOG.error("removeSnatEntries : Invalid routerId returned for routerName {}", routerUuid.getValue()); - return; - } - Collection externalIps = NatUtil.getExternalIpsForRouter(dataBroker,routerId); - if (natMode == NatMode.Controller) { - coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + routerUuid.getValue(), - () -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, - tx -> externalRouterListener.handleDisableSnatInternetVpn(routerUuid.getValue(), routerId, - networkUuid, externalIps, original.getVpnid().getValue(), tx))), - NatConstants.NAT_DJC_MAX_RETRIES); + if (original.getRouterIds() != null) { + for (Uuid routerUuid : original.getRouterIds()) { + long routerId = NatUtil.getVpnId(dataBroker, routerUuid.getValue()); + if (routerId == NatConstants.INVALID_ID) { + LOG.error("removeSnatEntries : Invalid routerId returned for routerName {}", routerUuid.getValue()); + return; + } + Collection externalIps = NatUtil.getExternalIpsForRouter(dataBroker,routerId); + if (natMode == NatMode.Controller) { + coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + routerUuid.getValue(), + () -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, + tx -> externalRouterListener.handleDisableSnatInternetVpn(routerUuid.getValue(), routerId, + networkUuid, externalIps, original.getVpnid().getValue(), tx))), + NatConstants.NAT_DJC_MAX_RETRIES); + } } } } private void associateExternalNetworkWithVPN(Networks network) { - List routerIds = requireNonNullElse(network.getRouterIds(), Collections.emptyList()); - for (Uuid routerId : routerIds) { - //long router = NatUtil.getVpnId(dataBroker, routerId.getValue()); + if (network.getRouterIds() != null) { + List routerIds = network.getRouterIds(); + for (Uuid routerId : routerIds) { + //long router = NatUtil.getVpnId(dataBroker, routerId.getValue()); - InstanceIdentifier routerPortsId = NatUtil.getRouterPortsId(routerId.getValue()); - Optional optRouterPorts = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, - routerPortsId); - if (!optRouterPorts.isPresent()) { - LOG.debug("associateExternalNetworkWithVPN : Could not read Router Ports data object with id: {} " + InstanceIdentifier routerPortsId = NatUtil.getRouterPortsId(routerId.getValue()); + Optional optRouterPorts = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, + routerPortsId); + if (!optRouterPorts.isPresent()) { + LOG.debug("associateExternalNetworkWithVPN : Could not read Router Ports data object with id: {} " + "to handle associate ext nw {}", routerId, network.getId()); - continue; - } - RouterPorts routerPorts = optRouterPorts.get(); - for (Ports port : requireNonNullElse(routerPorts.getPorts(), Collections.emptyList())) { - String portName = port.getPortName(); - BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); - if (dpnId.equals(BigInteger.ZERO)) { - LOG.debug("associateExternalNetworkWithVPN : DPN not found for {}, " - + "skip handling of ext nw {} association", portName, network.getId()); continue; } - for (InternalToExternalPortMap ipMap : requireNonNullElse(port.getInternalToExternalPortMap(), - Collections.emptyList())) { - // remove all VPN related entries - coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + ipMap.key(), - () -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, - tx -> floatingIpListener.createNATFlowEntries(dpnId, portName, routerId.getValue(), - network.getId(), ipMap, tx))), NatConstants.NAT_DJC_MAX_RETRIES); + RouterPorts routerPorts = optRouterPorts.get(); + for (Ports port : routerPorts.nonnullPorts()) { + String portName = port.getPortName(); + BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); + if (dpnId.equals(BigInteger.ZERO)) { + LOG.debug("associateExternalNetworkWithVPN : DPN not found for {}, " + + "skip handling of ext nw {} association", portName, network.getId()); + continue; + } + for (InternalToExternalPortMap ipMap : port.nonnullInternalToExternalPortMap()) { + // remove all VPN related entries + coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + ipMap.key(), + () -> Collections.singletonList( + txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, + tx -> floatingIpListener.createNATFlowEntries(dpnId, portName, routerId.getValue(), + network.getId(), ipMap, tx))), NatConstants.NAT_DJC_MAX_RETRIES); + } } } - } - // SNAT - for (Uuid routerId : routerIds) { - LOG.debug("associateExternalNetworkWithVPN() : for routerId {}", routerId); - Uuid networkId = network.getId(); - if (networkId == null) { - LOG.error("associateExternalNetworkWithVPN : networkId is null for the router ID {}", routerId); - return; - } - final String vpnName = network.getVpnid().getValue(); - if (vpnName == null) { - LOG.error("associateExternalNetworkWithVPN : No VPN associated with ext nw {} for router {}", + // SNAT + for (Uuid routerId : routerIds) { + LOG.debug("associateExternalNetworkWithVPN() : for routerId {}", routerId); + Uuid networkId = network.getId(); + if (networkId == null) { + LOG.error("associateExternalNetworkWithVPN : networkId is null for the router ID {}", routerId); + return; + } + final String vpnName = network.getVpnid().getValue(); + if (vpnName == null) { + LOG.error("associateExternalNetworkWithVPN : No VPN associated with ext nw {} for router {}", networkId, routerId); - return; - } + return; + } - BigInteger dpnId = new BigInteger("0"); - InstanceIdentifier routerToNaptSwitch = - NatUtil.buildNaptSwitchRouterIdentifier(routerId.getValue()); - Optional rtrToNapt = - MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, routerToNaptSwitch); - if (rtrToNapt.isPresent()) { - dpnId = rtrToNapt.get().getPrimarySwitchId(); - } - LOG.debug("associateExternalNetworkWithVPN : got primarySwitch as dpnId{} ", dpnId); - if (dpnId == null || dpnId.equals(BigInteger.ZERO)) { - LOG.warn("associateExternalNetworkWithVPN : primary napt Switch not found for router {} on dpn: {}", - routerId, dpnId); - return; - } - final BigInteger finalDpnId = dpnId; - coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + routerId.getValue(), - () -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, - confTx -> { - Long routerIdentifier = NatUtil.getVpnId(dataBroker, routerId.getValue()); - InstanceIdentifierBuilder idBuilder = - InstanceIdentifier.builder(IntextIpMap.class) - .child(org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111 - .intext.ip.map.IpMapping.class, - new org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111 - .intext.ip.map.IpMappingKey(routerIdentifier)); - InstanceIdentifier id = idBuilder.build(); - Optional ipMapping = MDSALUtil.read(dataBroker, - LogicalDatastoreType.OPERATIONAL, id); - if (ipMapping.isPresent()) { - for (IpMap ipMap : requireNonNullElse(ipMapping.get().getIpMap(), - Collections.emptyList())) { - String externalIp = ipMap.getExternalIp(); - LOG.debug("associateExternalNetworkWithVPN : Calling advToBgpAndInstallFibAndTsFlows " - + "for dpnId {},vpnName {} and externalIp {}", finalDpnId, vpnName, externalIp); - if (natMode == NatMode.Controller) { - externalRouterListener.advToBgpAndInstallFibAndTsFlows(finalDpnId, + BigInteger dpnId = new BigInteger("0"); + InstanceIdentifier routerToNaptSwitch = + NatUtil.buildNaptSwitchRouterIdentifier(routerId.getValue()); + Optional rtrToNapt = + MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, routerToNaptSwitch); + if (rtrToNapt.isPresent()) { + dpnId = rtrToNapt.get().getPrimarySwitchId(); + } + LOG.debug("associateExternalNetworkWithVPN : got primarySwitch as dpnId{} ", dpnId); + if (dpnId == null || dpnId.equals(BigInteger.ZERO)) { + LOG.warn("associateExternalNetworkWithVPN : primary napt Switch not found for router {} on dpn: {}", + routerId, dpnId); + return; + } + final BigInteger finalDpnId = dpnId; + coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + routerId.getValue(), + () -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, + confTx -> { + Long routerIdentifier = NatUtil.getVpnId(dataBroker, routerId.getValue()); + InstanceIdentifierBuilder idBuilder = + InstanceIdentifier.builder(IntextIpMap.class) + .child(org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111 + .intext.ip.map.IpMapping.class, + new org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111 + .intext.ip.map.IpMappingKey(routerIdentifier)); + InstanceIdentifier id = idBuilder.build(); + Optional ipMapping = MDSALUtil.read(dataBroker, + LogicalDatastoreType.OPERATIONAL, id); + if (ipMapping.isPresent()) { + for (IpMap ipMap : ipMapping.get().nonnullIpMap()) { + String externalIp = ipMap.getExternalIp(); + LOG.debug( + "associateExternalNetworkWithVPN : Calling advToBgpAndInstallFibAndTsFlows " + + "for dpnId {},vpnName {} and externalIp {}", finalDpnId, vpnName, + externalIp); + if (natMode == NatMode.Controller) { + externalRouterListener.advToBgpAndInstallFibAndTsFlows(finalDpnId, NwConstants.INBOUND_NAPT_TABLE, vpnName, routerIdentifier, routerId.getValue(), externalIp, network.getId(), null /* external-router */, confTx); + } } - } - } else { - LOG.warn("associateExternalNetworkWithVPN: No ipMapping present fot the routerId {}", + } else { + LOG.warn("associateExternalNetworkWithVPN: No ipMapping present fot the routerId {}", routerId); - } + } - long vpnId = NatUtil.getVpnId(dataBroker, vpnName); - // Install 47 entry to point to 21 - if (natMode == NatMode.Controller) { - externalRouterListener.installNaptPfibEntriesForExternalSubnets(routerId.getValue(), + long vpnId = NatUtil.getVpnId(dataBroker, vpnName); + // Install 47 entry to point to 21 + if (natMode == NatMode.Controller) { + externalRouterListener.installNaptPfibEntriesForExternalSubnets(routerId.getValue(), finalDpnId, confTx); - if (vpnId != -1) { - LOG.debug("associateExternalNetworkWithVPN : Calling externalRouterListener " + if (vpnId != -1) { + LOG.debug("associateExternalNetworkWithVPN : Calling externalRouterListener " + "installNaptPfibEntry for dpnId {} and vpnId {}", finalDpnId, vpnId); - externalRouterListener.installNaptPfibEntry(finalDpnId, vpnId, confTx); + externalRouterListener.installNaptPfibEntry(finalDpnId, vpnId, confTx); + } } - } - })), NatConstants.NAT_DJC_MAX_RETRIES); + })), NatConstants.NAT_DJC_MAX_RETRIES); + } } } private void disassociateExternalNetworkFromVPN(Networks network, String vpnName) { - for (Uuid routerId : requireNonNullElse(network.getRouterIds(), Collections.emptyList())) { - InstanceIdentifier routerPortsId = NatUtil.getRouterPortsId(routerId.getValue()); - Optional optRouterPorts = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, - routerPortsId); - if (!optRouterPorts.isPresent()) { - LOG.debug("disassociateExternalNetworkFromVPN : Could not read Router Ports data object with id: {} " - + "to handle disassociate ext nw {}", routerId, network.getId()); - continue; - } - RouterPorts routerPorts = optRouterPorts.get(); - for (Ports port : requireNonNullElse(routerPorts.getPorts(), Collections.emptyList())) { - String portName = port.getPortName(); - BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); - if (dpnId.equals(BigInteger.ZERO)) { - LOG.debug("disassociateExternalNetworkFromVPN : DPN not found for {}," - + "skip handling of ext nw {} disassociation", portName, network.getId()); + if (network.getRouterIds() != null) { + for (Uuid routerId : network.getRouterIds()) { + InstanceIdentifier routerPortsId = NatUtil.getRouterPortsId(routerId.getValue()); + Optional optRouterPorts = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, + routerPortsId); + if (!optRouterPorts.isPresent()) { + LOG.debug( + "disassociateExternalNetworkFromVPN : Could not read Router Ports data object with id: {} " + + "to handle disassociate ext nw {}", routerId, network.getId()); continue; } - for (InternalToExternalPortMap intExtPortMap : requireNonNullElse(port.getInternalToExternalPortMap(), - Collections.emptyList())) { - coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + intExtPortMap.key(), - () -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, - tx -> floatingIpListener.removeNATFlowEntries(dpnId, portName, vpnName, routerId.getValue(), - intExtPortMap, tx))), NatConstants.NAT_DJC_MAX_RETRIES); + RouterPorts routerPorts = optRouterPorts.get(); + for (Ports port : routerPorts.nonnullPorts()) { + String portName = port.getPortName(); + BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); + if (dpnId.equals(BigInteger.ZERO)) { + LOG.debug("disassociateExternalNetworkFromVPN : DPN not found for {}," + + "skip handling of ext nw {} disassociation", portName, network.getId()); + continue; + } + for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap()) { + coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + intExtPortMap.key(), + () -> Collections.singletonList( + txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, + tx -> floatingIpListener.removeNATFlowEntries(dpnId, portName, vpnName, + routerId.getValue(), + intExtPortMap, tx))), NatConstants.NAT_DJC_MAX_RETRIES); + } } } } 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 c0f2033a4d..09e5c4a685 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 @@ -9,7 +9,6 @@ package org.opendaylight.netvirt.natservice.internal; 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.netvirt.natservice.internal.NatUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; @@ -416,7 +415,11 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBaseemptyList())) { + @Nullable List subnetIds = routerEntry.getSubnetIds(); + if (subnetIds == null) { + return; + } + for (Uuid subnet : subnetIds) { LOG.debug("subnetRegisterMapping : Looping internal subnets for subnet {}", subnet); InstanceIdentifier subnetmapId = InstanceIdentifier .builder(Subnetmaps.class) @@ -1428,12 +1431,10 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBaseemptyList())) { + for (IntextIpProtocolType intextIpProtocolType : + ipPortMapping.get().nonnullIntextIpProtocolType()) { ProtocolTypes protoType = intextIpProtocolType.getProtocol(); - for (IpPortMap ipPortMap : requireNonNullElse(intextIpProtocolType.getIpPortMap(), - Collections.emptyList())) { + for (IpPortMap ipPortMap : intextIpProtocolType.nonnullIpPortMap()) { IpPortExternal ipPortExternal = ipPortMap.getIpPortExternal(); if (ipPortExternal.getIpAddress().equals(externalIp)) { externalPorts.add(ipPortExternal.getPortNum()); @@ -1619,10 +1620,8 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBaseemptyList())) { - for (ExternalIpCounter externalIpCount : requireNonNullElse(ext.getExternalIpCounter(), - Collections.emptyList())) { + for (ExternalCounters ext : externalIpsCounters.nonnullExternalCounters()) { + for (ExternalIpCounter externalIpCount : ext.nonnullExternalIpCounter()) { if (externalIpCount.getExternalIp().equals(externalIp)) { if (externalIpCount.getCounter() != 0) { return true; @@ -2042,10 +2041,8 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBaseemptyList())) { - for (IpPortMap ipPortMap : requireNonNullElse(intextIpProtocolType.getIpPortMap(), - Collections.emptyList())) { + for (IntextIpProtocolType intextIpProtocolType : ipPortMapping.nonnullIntextIpProtocolType()) { + for (IpPortMap ipPortMap : intextIpProtocolType.nonnullIpPortMap()) { String ipPortInternal = ipPortMap.getIpPortInternal(); String[] ipPortParts = ipPortInternal.split(":"); if (ipPortParts.length != 2) { @@ -2158,10 +2155,8 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBaseemptyList())) { - for (IpPortMap ipPortMap : requireNonNullElse(intextIpProtocolType.getIpPortMap(), - Collections.emptyList())) { + for (IntextIpProtocolType intextIpProtocolType : ipPortMapping.nonnullIntextIpProtocolType()) { + for (IpPortMap ipPortMap : intextIpProtocolType.nonnullIpPortMap()) { String ipPortInternal = ipPortMap.getIpPortInternal(); String[] ipPortParts = ipPortInternal.split(":"); if (ipPortParts.length != 2) { @@ -2730,10 +2725,8 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBaseemptyList())) { - for (IpPortMap ipPortMap : requireNonNullElse(intextIpProtocolType.getIpPortMap(), - Collections.emptyList())) { + for (IntextIpProtocolType intextIpProtocolType : ipPortMapping.nonnullIntextIpProtocolType()) { + for (IpPortMap ipPortMap : intextIpProtocolType.nonnullIpPortMap()) { String ipPortInternal = ipPortMap.getIpPortInternal(); String[] ipPortParts = ipPortInternal.split(":"); if (ipPortParts.length != 2) { diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NAPTSwitchSelector.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NAPTSwitchSelector.java index af98e5edd0..f703b8e467 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NAPTSwitchSelector.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NAPTSwitchSelector.java @@ -7,11 +7,8 @@ */ package org.opendaylight.netvirt.natservice.internal; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; - import com.google.common.base.Optional; import java.math.BigInteger; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -93,8 +90,7 @@ public class NAPTSwitchSelector { if (optNaptSwitches.isPresent()) { NaptSwitches naptSwitches = optNaptSwitches.get(); - for (RouterToNaptSwitch naptSwitch : requireNonNullElse(naptSwitches.getRouterToNaptSwitch(), - Collections.emptyList())) { + for (RouterToNaptSwitch naptSwitch : naptSwitches.nonnullRouterToNaptSwitch()) { BigInteger primarySwitch = naptSwitch.getPrimarySwitchId(); //update weight Integer weight = switchWeights.get(primarySwitch); diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptManager.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptManager.java index 6c68bce518..95b6fa6580 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptManager.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NaptManager.java @@ -11,8 +11,6 @@ */ package org.opendaylight.netvirt.natservice.internal; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; - import com.google.common.base.Optional; import com.google.common.util.concurrent.UncheckedExecutionException; import java.util.ArrayList; @@ -569,7 +567,7 @@ public class NaptManager { InstanceIdentifier id = idBuilder.build(); Optional ipMapping = MDSALUtil.read(dataBroker, LogicalDatastoreType.OPERATIONAL, id); if (ipMapping.isPresent()) { - for (IpMap ipMap : requireNonNullElse(ipMapping.get().getIpMap(), Collections.emptyList())) { + for (IpMap ipMap : ipMapping.get().nonnullIpMap()) { if (Objects.equals(ipMap.getInternalIp(), internalIp)) { LOG.debug("checkIpMap : IpMap : {}", ipMap); externalIp = ipMap.getExternalIp(); @@ -706,7 +704,7 @@ public class NaptManager { // Get all externalIps and decrement their counters before deleting the ipmap Optional ipMapping = MDSALUtil.read(dataBroker, LogicalDatastoreType.OPERATIONAL, id); if (ipMapping.isPresent()) { - for (IpMap ipMap : requireNonNullElse(ipMapping.get().getIpMap(), Collections.emptyList())) { + for (IpMap ipMap : ipMapping.get().nonnullIpMap()) { String externalIp = ipMap.getExternalIp(); LOG.debug("removeIpMappingForRouterID : externalIP is {}", externalIp); if (externalIp != null) { @@ -765,8 +763,7 @@ public class NaptManager { LOG.debug("initialiseExternalCounter : Initialise External IPs counter"); //update the new counter value for this externalIp - for (ExternalIps externalIp : requireNonNullElse(routers.getExternalIps(), - Collections.emptyList())) { + for (ExternalIps externalIp : routers.nonnullExternalIps()) { String[] ipSplit = externalIp.getIpAddress().split("/"); String extIp = ipSplit[0]; String extPrefix = Short.toString(NatConstants.DEFAULT_PREFIX); diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatInterfaceStateChangeListener.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatInterfaceStateChangeListener.java index 48ee9e173c..fa8e7e8a2e 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatInterfaceStateChangeListener.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatInterfaceStateChangeListener.java @@ -7,12 +7,8 @@ */ package org.opendaylight.netvirt.natservice.internal; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; - import com.google.common.base.Optional; import java.math.BigInteger; - -import java.util.Collections; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Singleton; @@ -119,8 +115,7 @@ public class NatInterfaceStateChangeListener LOG.warn("remove : Interface {} is not a VPN Interface, ignoring.", interfaceName); return; } - for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse( - cfgVpnInterface.get().getVpnInstanceNames(), Collections.emptyList())) { + for (VpnInstanceNames vpnInterfaceVpnInstance : cfgVpnInterface.get().nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); InstanceIdentifier idOper = NatUtil .getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName); @@ -168,8 +163,7 @@ public class NatInterfaceStateChangeListener LOG.warn("update : Interface {} is not a VPN Interface, ignoring.", interfaceName); return; } - for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse( - cfgVpnInterface.get().getVpnInstanceNames(), Collections.emptyList())) { + for (VpnInstanceNames vpnInterfaceVpnInstance : cfgVpnInterface.get().nonnullVpnInstanceNames()) { String vpnName = vpnInterfaceVpnInstance.getVpnName(); InstanceIdentifier idOper = NatUtil .getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName); diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatSouthboundEventHandlers.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatSouthboundEventHandlers.java index 4251aceae8..64cfe3f592 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatSouthboundEventHandlers.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatSouthboundEventHandlers.java @@ -9,7 +9,6 @@ package org.opendaylight.netvirt.natservice.internal; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; import static org.opendaylight.genius.infra.Datastore.OPERATIONAL; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.collect.HashBasedTable; @@ -322,7 +321,7 @@ public class NatSouthboundEventHandlers { + "and port name {}", routerId, portName); return Collections.emptyList(); } - return requireNonNullElse(port.get().getInternalToExternalPortMap(), Collections.emptyList()); + return port.get().nonnullInternalToExternalPortMap(); } @Nullable @@ -425,10 +424,10 @@ public class NatSouthboundEventHandlers { continue; } - for (IntIpProtoType protoType : requireNonNullElse(ipPort.getIntIpProtoType(), - Collections.emptyList())) { + for (IntIpProtoType protoType : ipPort.nonnullIntIpProtoType()) { ProtocolTypes protocol = protoType.getProtocol(); - for (Integer portnum : requireNonNullElse(protoType.getPorts(), Collections.emptyList())) { + @Nullable List ports = protoType.getPorts(); + for (Integer portnum : (ports != null ? ports : Collections.emptyList())) { //build and remove the flow in outbound table try { removeNatFlow(naptSwitch, NwConstants.OUTBOUND_NAPT_TABLE, routerId, internalIp, portnum); diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatTunnelInterfaceStateListener.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatTunnelInterfaceStateListener.java index 5bb6675fea..b01a0122b7 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatTunnelInterfaceStateListener.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatTunnelInterfaceStateListener.java @@ -9,7 +9,6 @@ package org.opendaylight.netvirt.natservice.internal; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; import com.google.common.base.Optional; import com.google.common.base.Strings; @@ -20,7 +19,6 @@ import com.google.common.util.concurrent.MoreExecutors; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -858,7 +856,7 @@ public class NatTunnelInterfaceStateListener l3Vni = natOverVxlanUtil.getInternetVpnVni(vpnName, routerId).longValue(); } } - for (Ports port : requireNonNullElse(routerPorts.getPorts(), Collections.emptyList())) { + for (Ports port : routerPorts.nonnullPorts()) { //Get the DPN on which this interface resides final String interfaceName = port.getPortName(); final BigInteger fipCfgdDpnId = NatUtil.getDpnForInterface(interfaceService, interfaceName); @@ -873,8 +871,7 @@ public class NatTunnelInterfaceStateListener tepAddedDpnId, fipCfgdDpnId, interfaceName); continue; } - for (InternalToExternalPortMap intExtPortMap : requireNonNullElse(port.getInternalToExternalPortMap(), - Collections.emptyList())) { + for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap()) { final String internalIp = intExtPortMap.getInternalIp(); final String externalIp = intExtPortMap.getExternalIp(); LOG.debug("hndlTepAddForDnatInEachRtr : DNAT -> Advertising the FIB route to the floating IP {} " @@ -1085,7 +1082,7 @@ public class NatTunnelInterfaceStateListener l3Vni = natOverVxlanUtil.getInternetVpnVni(vpnName, routerId).longValue(); } } - for (Ports port : requireNonNullElse(routerPorts.getPorts(), Collections.emptyList())) { + for (Ports port : routerPorts.nonnullPorts()) { //Get the DPN on which this interface resides String interfaceName = port.getPortName(); BigInteger fipCfgdDpnId = NatUtil.getDpnForInterface(interfaceService, interfaceName); @@ -1100,8 +1097,7 @@ public class NatTunnelInterfaceStateListener tepDeletedDpnId, fipCfgdDpnId, interfaceName); continue; } - for (InternalToExternalPortMap intExtPortMap : requireNonNullElse(port.getInternalToExternalPortMap(), - Collections.emptyList())) { + for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap()) { String internalIp = intExtPortMap.getInternalIp(); String externalIp = intExtPortMap.getExternalIp(); externalIp = NatUtil.validateAndAddNetworkMask(externalIp); diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatUtil.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatUtil.java index 99e405d0c7..6c81d01977 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatUtil.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatUtil.java @@ -9,7 +9,6 @@ package org.opendaylight.netvirt.natservice.internal; import static java.util.Collections.emptyList; -import static java.util.Objects.requireNonNull; import static org.opendaylight.controller.md.sal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; @@ -724,8 +723,7 @@ public final class NatUtil { SingleTransactionDataBroker.syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(broker, LogicalDatastoreType.CONFIGURATION, vpnMapsIdentifier); if (optionalVpnMaps.isPresent() && optionalVpnMaps.get().getVpnMap() != null) { - for (VpnMap vpnMap : requireNonNullElse(optionalVpnMaps.get().getVpnMap(), - Collections.emptyList())) { + for (VpnMap vpnMap : optionalVpnMaps.get().nonnullVpnMap()) { if (routerId.equals(vpnMap.getVpnId().getValue())) { continue; } @@ -981,7 +979,7 @@ public final class NatUtil { // Ensure there are no duplicates Collection externalIps = new HashSet<>(); if (ipMappingOptional.isPresent()) { - for (IpMap ipMap : requireNonNullElse(ipMappingOptional.get().getIpMap(), Collections.emptyList())) { + for (IpMap ipMap : ipMappingOptional.get().nonnullIpMap()) { externalIps.add(ipMap.getExternalIp()); } } @@ -1006,7 +1004,7 @@ public final class NatUtil { LogicalDatastoreType.OPERATIONAL, getIpMappingBuilder(routerId)); Map externalIpsLabel = new HashMap<>(); if (ipMappingOptional.isPresent()) { - for (IpMap ipMap : requireNonNullElse(ipMappingOptional.get().getIpMap(), Collections.emptyList())) { + for (IpMap ipMap : ipMappingOptional.get().nonnullIpMap()) { externalIpsLabel.put(ipMap.getExternalIp(), ipMap.getLabel()); } } @@ -1024,8 +1022,7 @@ public final class NatUtil { if (externalCountersData.isPresent()) { ExternalCounters externalCounter = externalCountersData.get(); short countOfLstLoadExtIp = 32767; - for (ExternalIpCounter externalIpCounter : requireNonNullElse(externalCounter.getExternalIpCounter(), - Collections.emptyList())) { + for (ExternalIpCounter externalIpCounter : externalCounter.nonnullExternalIpCounter()) { String curExternalIp = externalIpCounter.getExternalIp(); short countOfCurExtIp = externalIpCounter.getCounter(); if (countOfCurExtIp < countOfLstLoadExtIp) { @@ -1088,8 +1085,7 @@ public final class NatUtil { LogicalDatastoreType.OPERATIONAL, id); List dpns = new ArrayList<>(); if (routerDpnListData.isPresent()) { - for (DpnVpninterfacesList dpnVpnInterface : requireNonNullElse( - routerDpnListData.get().getDpnVpninterfacesList(), Collections.emptyList())) { + for (DpnVpninterfacesList dpnVpnInterface : routerDpnListData.get().nonnullDpnVpninterfacesList()) { dpns.add(dpnVpnInterface.getDpnId()); } } @@ -1179,8 +1175,7 @@ public final class NatUtil { if (optionalDpnRoutersList.isPresent()) { RoutersList routersList = new RoutersListBuilder().withKey(new RoutersListKey(routerName)) .setRouter(routerName).build(); - List routersListFromDs = requireNonNullElse(optionalDpnRoutersList.get().getRoutersList(), - emptyList()); + List routersListFromDs = optionalDpnRoutersList.get().nonnullRoutersList(); if (!routersListFromDs.contains(routersList)) { LOG.debug("addToDpnRoutersMap : Router {} not present for the DPN {}" + " in the ODL-L3VPN : DPNRouters map", routerName, dpId); @@ -1409,7 +1404,7 @@ public final class NatUtil { LOG.error("getEgressActionsForTunnels : RPC Call to Get egress actions for Tunnels {} " + "returned with Errors {}", ifName, rpcResult.getErrors()); } else { - actions = rpcResult.getResult().getAction(); + actions = rpcResult.getResult().nonnullAction(); } } else { RpcResult rpcResult = @@ -1418,11 +1413,11 @@ public final class NatUtil { LOG.error("getEgressActionsForInterface : RPC Call to Get egress actions for interface {} " + "returned with Errors {}", ifName, rpcResult.getErrors()); } else { - actions = rpcResult.getResult().getAction(); + actions = rpcResult.getResult().nonnullAction(); } } List listActionInfo = new ArrayList<>(); - for (Action action : requireNonNullElse(actions, Collections.emptyList())) { + for (Action action : actions) { org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action actionClass = action.getAction(); if (actionClass instanceof OutputActionCase) { @@ -1501,7 +1496,7 @@ public final class NatUtil { LOG.error("getSubnetIdForFloatingIp : port is null"); return null; } - for (FixedIps ip : requireNonNullElse(port.getFixedIps(), Collections.emptyList())) { + for (FixedIps ip : port.nonnullFixedIps()) { if (Objects.equals(ip.getIpAddress(), targetIP)) { return ip.getSubnetId(); } @@ -1774,10 +1769,10 @@ public final class NatUtil { SingleTransactionDataBroker.syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(broker, LogicalDatastoreType.CONFIGURATION, externalNwIdentifier); if (externalNwData.isPresent()) { - for (Networks externalNw : requireNonNullElse(externalNwData.get().getNetworks(), - Collections.emptyList())) { + for (Networks externalNw : externalNwData.get().nonnullNetworks()) { if (externalNw.getVpnid() != null && externalNw.getVpnid().equals(vpnUuid)) { - return requireNonNullElse(externalNw.getRouterIds(), emptyList()); + @Nullable List routerIds = externalNw.getRouterIds(); + return routerIds != null ? routerIds : emptyList(); } } } @@ -1898,7 +1893,7 @@ public final class NatUtil { @Nullable protected static Uuid getExternalSubnetForRouterExternalIp(String externalIpAddress, Routers router) { externalIpAddress = validateAndAddNetworkMask(externalIpAddress); - for (ExternalIps extIp : requireNonNullElse(router.getExternalIps(), Collections.emptyList())) { + for (ExternalIps extIp : router.nonnullExternalIps()) { String extIpString = validateAndAddNetworkMask(extIp.getIpAddress()); if (extIpString.equals(externalIpAddress)) { return extIp.getSubnetId(); @@ -2573,12 +2568,6 @@ public final class NatUtil { return node.augmentation(OvsdbBridgeAugmentation.class); } - // 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 String getDefaultFibRouteToSNATForSubnetJobKey(String subnetName, BigInteger dpnId) { return NatConstants.NAT_DJC_PREFIX + subnetName + dpnId; } diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatVpnMapsChangeListener.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatVpnMapsChangeListener.java index 994c16f37d..3fc9731761 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatVpnMapsChangeListener.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatVpnMapsChangeListener.java @@ -8,11 +8,9 @@ package org.opendaylight.netvirt.natservice.internal; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; import com.google.common.base.Optional; import java.math.BigInteger; -import java.util.Collections; import java.util.Objects; import java.util.concurrent.ExecutionException; import javax.inject.Inject; @@ -206,7 +204,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBaseemptyList())) { + for (Ports port : optRouterPorts.get().nonnullPorts()) { String portName = port.getPortName(); BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); if (dpnId.equals(BigInteger.ZERO)) { @@ -215,8 +213,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBaseemptyList())) { + for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap()) { //remove all NAT related entries with routerName //floatingIpListener.removeNATOnlyFlowEntries(dpnId, portName, routerName, null, // intExtPortMap.getInternalIp(), externalIp); @@ -239,7 +236,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBaseemptyList())) { + for (Ports port : optRouterPorts.get().nonnullPorts()) { String portName = port.getPortName(); BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); if (dpnId.equals(BigInteger.ZERO)) { @@ -247,8 +244,7 @@ public class NatVpnMapsChangeListener extends AsyncDataTreeChangeListenerBaseemptyList())) { + for (InternalToExternalPortMap intExtPortMap : port.nonnullInternalToExternalPortMap()) { //remove all NAT related entries with routerName //floatingIpListener.removeNATOnlyFlowEntries(dpnId, portName, routerName, vpnName, // intExtPortMap.getInternalIp(), externalIp); diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/UpgradeStateListener.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/UpgradeStateListener.java index 8abb618728..736316f83d 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/UpgradeStateListener.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/UpgradeStateListener.java @@ -9,19 +9,15 @@ package org.opendaylight.netvirt.natservice.internal; import static org.opendaylight.genius.infra.Datastore.CONFIGURATION; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; import com.google.common.base.Optional; - import java.math.BigInteger; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; - import javax.annotation.Nonnull; 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.DataTreeIdentifier; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -105,8 +101,7 @@ public class UpgradeStateListener extends AbstractClusteredSyncDataTreeChangeLis if (original.isUpgradeInProgress() && !updated.isUpgradeInProgress()) { Optional npatSwitches = NatUtil.getAllPrimaryNaptSwitches(dataBroker); if (npatSwitches.isPresent()) { - for (RouterToNaptSwitch routerToNaptSwitch : requireNonNullElse( - npatSwitches.get().getRouterToNaptSwitch(), Collections.emptyList())) { + for (RouterToNaptSwitch routerToNaptSwitch : npatSwitches.get().nonnullRouterToNaptSwitch()) { BigInteger primaryNaptDpnId = routerToNaptSwitch.getPrimarySwitchId(); if (!NatUtil.getSwitchStatus(dataBroker, routerToNaptSwitch.getPrimarySwitchId())) { String routerUuid = routerToNaptSwitch.getRouterName(); @@ -137,7 +132,7 @@ public class UpgradeStateListener extends AbstractClusteredSyncDataTreeChangeLis return; } - for (Routers router : requireNonNullElse(routers.getRouters(), Collections.emptyList())) { + for (Routers router : routers.nonnullRouters()) { List externalIps = router.getExternalIps(); if (router.isEnableSnat() && externalIps != null && !externalIps.isEmpty()) { centralizedSwitchScheduler.scheduleCentralizedSwitch(router); diff --git a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/rpcservice/NatRpcServiceImpl.java b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/rpcservice/NatRpcServiceImpl.java index 2244602b6d..19ba7089a4 100644 --- a/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/rpcservice/NatRpcServiceImpl.java +++ b/natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/rpcservice/NatRpcServiceImpl.java @@ -7,12 +7,9 @@ */ package org.opendaylight.netvirt.natservice.rpcservice; -import static org.opendaylight.netvirt.natservice.internal.NatUtil.requireNonNullElse; - import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; @@ -137,8 +134,7 @@ public class NatRpcServiceImpl implements OdlNatRpcService { outerloop: for (Uuid subnetUuid: subnetUuidList) { subNet = nvpnManager.getNeutronSubnet(subnetUuid); - for (AllocationPools allocationPool : requireNonNullElse(subNet.getAllocationPools(), - Collections.emptyList())) { + for (AllocationPools allocationPool : subNet.nonnullAllocationPools()) { if (NatUtil.isIpInSubnet(ipAddress, allocationPool.getStart().stringValue(), allocationPool.getEnd().stringValue())) { @@ -166,8 +162,7 @@ public class NatRpcServiceImpl implements OdlNatRpcService { LOG.warn("getNatTranslationsForNetworkAndIpaddress : No DNAT IP Mapping found for IP {}", ipAddress); } else { for (Ports fipPort : fipPorts) { - for (InternalToExternalPortMap fipMap : requireNonNullElse(fipPort.getInternalToExternalPortMap(), - Collections.emptyList())) { + for (InternalToExternalPortMap fipMap : fipPort.nonnullInternalToExternalPortMap()) { if (fipMap.getInternalIp().equals(ipAddress)) { output = new GetNatTranslationsForNetworkAndIpaddressOutputBuilder() .setExternalIp(fipMap.getExternalIp()) @@ -184,10 +179,8 @@ public class NatRpcServiceImpl implements OdlNatRpcService { if (ipPortMapping == null) { LOG.warn("getNatTranslationsForNetworkAndIpaddress : No SNAT IP Mapping found for IP {}", ipAddress); } else { - for (IntextIpProtocolType protocolType : requireNonNullElse(ipPortMapping.getIntextIpProtocolType(), - Collections.emptyList())) { - for (IpPortMap ipPortMap : requireNonNullElse(protocolType.getIpPortMap(), - Collections.emptyList())) { + for (IntextIpProtocolType protocolType : ipPortMapping.nonnullIntextIpProtocolType()) { + for (IpPortMap ipPortMap : protocolType.nonnullIpPortMap()) { String[] internalIpPort = ipPortMap.getIpPortInternal().split(NwConstants.MACADDR_SEP); if (ipAddress.equals(internalIpPort[0])) { @@ -228,10 +221,8 @@ public class NatRpcServiceImpl implements OdlNatRpcService { // Capturing SNAT information List snatIpMapping = new ArrayList<>(); - for (IntextIpProtocolType protocolType : requireNonNullElse(ipPortMapping.getIntextIpProtocolType(), - Collections.emptyList())) { - for (IpPortMap ipPortMap : requireNonNullElse(protocolType.getIpPortMap(), - Collections.emptyList())) { + for (IntextIpProtocolType protocolType : ipPortMapping.nonnullIntextIpProtocolType()) { + for (IpPortMap ipPortMap : protocolType.nonnullIpPortMap()) { String[] internalPortMap = ipPortMap.getIpPortInternal().split(NwConstants.MACADDR_SEP); SnatIpMappingBuilder natIpMappingBuilder = new SnatIpMappingBuilder() .setInternalIp(internalPortMap[0]).setInternalPort(internalPortMap[1]) @@ -251,8 +242,7 @@ public class NatRpcServiceImpl implements OdlNatRpcService { LOG.warn("constructNatInformation : No DNAT IP Mapping found for router-uuid {}", routerUuid.getValue()); } else { for (Ports fipPort : fipPorts) { - for (InternalToExternalPortMap fipMap : requireNonNullElse(fipPort.getInternalToExternalPortMap(), - Collections.emptyList())) { + for (InternalToExternalPortMap fipMap : fipPort.nonnullInternalToExternalPortMap()) { DnatIpMappingBuilder natIpMappingBuilder = new DnatIpMappingBuilder() .setExternalIp(fipMap.getExternalIp()).setInternalIp(fipMap.getInternalIp()); dnatIpMapping.add(natIpMappingBuilder.build()); -- 2.36.6