Handle nullable lists in vpnmanager 82/77082/4
authorStephen Kitt <skitt@redhat.com>
Mon, 15 Oct 2018 15:47:28 +0000 (17:47 +0200)
committerSam Hague <shague@redhat.com>
Fri, 19 Oct 2018 22:14:43 +0000 (22:14 +0000)
Following YANGTOOLS-585, lists can be null (which is correctly
indicated with an @Nullable annotation). This patch deals with the
fallout.

Change-Id: I9b8bbfb69dff9af5334b7f6c57dbfc6348d68acb
Signed-off-by: Stephen Kitt <skitt@redhat.com>
35 files changed:
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/ICentralizedSwitchProvider.java
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/IVpnFootprintService.java
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/IVpnManager.java
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/InterfaceUtils.java
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/VpnExtraRouteHelper.java
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/VpnHelper.java
vpnmanager/api/src/main/java/org/opendaylight/netvirt/vpnmanager/api/intervpnlink/InterVpnLinkDataComposite.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/CentralizedSwitchChangeListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/CentralizedSwitchProvider.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/DpnInVpnChangeListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/InterfaceStateChangeListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetOpDpnManager.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRouteInterfaceStateChangeListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetmapChangeListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnFootprintService.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceOpListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnManagerImpl.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnOpStatusListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnSubnetRouteHandler.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/IVpnLinkServiceImpl.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkCacheImpl.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkLocator.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorStartTask.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/IpMonitorStopTask.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/ipv4/ArpUtils.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/populator/impl/L3vpnOverMplsGrePopulator.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/populator/impl/L3vpnPopulator.java
vpnmanager/shell/src/main/java/org/opendaylight/netvirt/vpnmanager/shell/ShowVpn.java
vpnmanager/shell/src/main/java/org/opendaylight/netvirt/vpnmanager/shell/ShowVpnInstanceOpData.java

index 75f1685e345a2a98d7f5d5bf5c5929f97a747f9d..5ab4cd1f0ce0c97d204a8bd5c75f59a2a4b14e4f 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.netvirt.vpnmanager.api;
 
 import java.math.BigInteger;
+import javax.annotation.Nullable;
 
 /**
  * ICentralizedSwitchProvider allows to create or interrogate centralized
@@ -27,6 +28,7 @@ public interface ICentralizedSwitchProvider {
      * @param routerName The router's name.
      * @return The primary switch id.
      */
+    @Nullable
     BigInteger getPrimarySwitchForRouter(String routerName);
 
 }
index fee328d23d0a4559831ad8f23f4be066560bff21..d239bdf1d334997c0b6ff371ca43ae12d3462c2b 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.netvirt.vpnmanager.api;
 
 import java.math.BigInteger;
+import javax.annotation.Nullable;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpn.to.dpn.list.IpAddresses;
 
@@ -23,6 +24,6 @@ public interface IVpnFootprintService {
      * @param interfaceName Name of the VPN interface to be added/removed to/from the specified DPN
      * @param add true for addition, false for removal
      */
-    void updateVpnToDpnMapping(BigInteger dpId, String vpnName, String primaryRd, String interfaceName,
+    void updateVpnToDpnMapping(BigInteger dpId, String vpnName, String primaryRd, @Nullable String interfaceName,
             ImmutablePair<IpAddresses.IpAddressSource, String> ipAddressSourceValuePair, boolean add);
 }
index 268c0f5da0a8a8912213ea9f1a79e6e368a0ffd2..c9c57209e079fb6e33d52da49db1f4e6a7987bb5 100644 (file)
@@ -14,6 +14,8 @@ import java.util.List;
 import java.util.Set;
 
 import java.util.concurrent.ExecutionException;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.genius.infra.Datastore.Configuration;
 import org.opendaylight.genius.infra.Datastore.Operational;
@@ -31,12 +33,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev15060
 
 
 public interface IVpnManager {
-    void addExtraRoute(String vpnName, String destination, String nextHop, String rd, String routerID,
-        Long l3vni, RouteOrigin origin, String intfName, Adjacency operationalAdj,
-        VrfEntry.EncapType encapType, TypedWriteTransaction<Configuration> confTx);
+    void addExtraRoute(String vpnName, String destination, String nextHop, String rd, @Nullable String routerID,
+        Long l3vni, RouteOrigin origin, @Nullable String intfName, @Nullable Adjacency operationalAdj,
+        VrfEntry.EncapType encapType, @Nonnull TypedWriteTransaction<Configuration> confTx);
 
-    void delExtraRoute(String vpnName, String destination, String nextHop, String rd, String routerID,
-        String intfName, TypedWriteTransaction<Configuration> confTx, TypedWriteTransaction<Operational> operTx);
+    void delExtraRoute(String vpnName, String destination, String nextHop, String rd, @Nullable String routerID,
+        @Nullable String intfName, @Nonnull TypedWriteTransaction<Configuration> confTx,
+        @Nonnull TypedWriteTransaction<Operational> operTx);
 
     void removePrefixFromBGP(String vpnName, String primaryRd, String extraRouteRd, String vpnInterfaceName,
                                     String prefix, String nextHop, String nextHopTunnelIp, BigInteger dpnId,
index 46a127573e2a75797ba2fd8bf97335627089358e..ecdb4855c734c2cdc48ee063214310c59e04ce2e 100644 (file)
@@ -12,6 +12,7 @@ import java.math.BigInteger;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
+import javax.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
@@ -124,6 +125,7 @@ public final class InterfaceUtils {
         return id;
     }
 
+    @Nullable
     public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state
         .Interface getInterfaceStateFromOperDS(
         DataBroker dataBroker, String interfaceName) {
@@ -139,6 +141,7 @@ public final class InterfaceUtils {
         return null;
     }
 
+    @Nullable
     public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces
         .Interface getInterface(
         DataBroker broker, String interfaceName) {
index 110f5eddfa70ce4b881e34f6614c48035870b1e7..4a22f3566835cc451019ec09e250ad9387b9707f 100644 (file)
@@ -11,12 +11,12 @@ package org.opendaylight.netvirt.vpnmanager.api;
 import static java.util.stream.Collectors.toList;
 
 import com.google.common.base.Optional;
-
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
-
+import javax.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.infra.Datastore.Configuration;
@@ -51,12 +51,6 @@ public final class VpnExtraRouteHelper {
 
     private VpnExtraRouteHelper() { }
 
-    public static  List<Routes> getVpnExtraroutes(DataBroker broker, String vpnName, String vpnRd) {
-        InstanceIdentifier<ExtraRoutes> vpnExtraRoutesId = getVpnToExtrarouteIdentifier(vpnName, vpnRd);
-        Optional<ExtraRoutes> vpnOpc = MDSALUtil.read(broker, LogicalDatastoreType.OPERATIONAL, vpnExtraRoutesId);
-        return vpnOpc.isPresent() ? vpnOpc.get().getRoutes() : new ArrayList<>();
-    }
-
     public static Optional<Routes> getVpnExtraroutes(DataBroker broker, String vpnName,
                                                      String vpnRd, String destPrefix) {
         InstanceIdentifier<Routes> vpnExtraRoutesId = getVpnToExtrarouteVrfIdIdentifier(vpnName, vpnRd, destPrefix);
@@ -75,12 +69,6 @@ public final class VpnExtraRouteHelper {
                         new ExtraRoutesKey(vrfId)).child(Routes.class, new RoutesKey(ipPrefix)).build();
     }
 
-    public static  InstanceIdentifier<ExtraRoutes> getVpnToExtrarouteIdentifier(String vpnName, String vrfId) {
-        return InstanceIdentifier.builder(VpnToExtraroutes.class)
-                .child(Vpn.class, new VpnKey(vpnName)).child(ExtraRoutes.class,
-                        new ExtraRoutesKey(vrfId)).build();
-    }
-
     public static  InstanceIdentifier<Vpn> getVpnToExtrarouteVpnIdentifier(String vpnName) {
         return InstanceIdentifier.builder(VpnToExtraroutes.class)
                 .child(Vpn.class, new VpnKey(vpnName)).build();
@@ -103,14 +91,14 @@ public final class VpnExtraRouteHelper {
     public static  List<String> getUsedRds(DataBroker broker, long vpnId, String destPrefix) {
         InstanceIdentifier<DestPrefixes> usedRdsId = getUsedRdsIdentifier(vpnId, destPrefix);
         Optional<DestPrefixes> usedRds = MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION, usedRdsId);
-        return usedRds.isPresent() ? usedRds.get().getAllocatedRds().stream()
+        return usedRds.isPresent() && usedRds.get().getAllocatedRds() != null ? usedRds.get().getAllocatedRds().stream()
                 .map(AllocatedRds::getRd).distinct().collect(toList()) : new ArrayList<>();
     }
 
     public static  List<String> getUsedRds(TypedReadTransaction<Configuration> confTx, long vpnId, String destPrefix)
             throws ExecutionException, InterruptedException {
         Optional<DestPrefixes> usedRds = confTx.read(getUsedRdsIdentifier(vpnId, destPrefix)).get();
-        return usedRds.isPresent() ? usedRds.get().getAllocatedRds().stream()
+        return usedRds.isPresent() && usedRds.get().getAllocatedRds() != null ? usedRds.get().getAllocatedRds().stream()
             .map(AllocatedRds::getRd).distinct().collect(toList()) : new ArrayList<>();
     }
 
@@ -132,16 +120,7 @@ public final class VpnExtraRouteHelper {
                 .child(AllocatedRds.class, new AllocatedRdsKey(nh)).build();
     }
 
-    public static List<Routes> getAllExtraRoutes(DataBroker broker, String vpnName, String vrfId) {
-        Optional<ExtraRoutes> extraRoutes = MDSALUtil.read(broker,LogicalDatastoreType.OPERATIONAL,
-                getVpnToExtrarouteIdentifier(vpnName, vrfId));
-        List<Routes> extraRoutesList = new ArrayList<>();
-        if (extraRoutes.isPresent()) {
-            extraRoutesList = extraRoutes.get().getRoutes();
-        }
-        return extraRoutesList;
-    }
-
+    @Nullable
     public static Class<? extends TunnelTypeBase> getTunnelType(ItmRpcService itmRpcService, String ifName) {
         try {
             Future<RpcResult<GetTunnelTypeOutput>> result =
@@ -166,8 +145,10 @@ public final class VpnExtraRouteHelper {
     }
 
     public static List<DestPrefixes> getExtraRouteDestPrefixes(DataBroker broker, Long vpnId) {
-        Optional<ExtrarouteRds> extraRoutes = MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION,
+        Optional<ExtrarouteRds> optionalExtraRoutes = MDSALUtil.read(broker, LogicalDatastoreType.CONFIGURATION,
                 getUsedRdsIdentifier(vpnId));
-        return extraRoutes.isPresent() ? extraRoutes.get().getDestPrefixes() : new ArrayList<>();
+        List<DestPrefixes> prefixes =
+            optionalExtraRoutes.isPresent() ? optionalExtraRoutes.get().getDestPrefixes() : null;
+        return prefixes == null ? Collections.emptyList() : prefixes;
     }
 }
index 0d605ced11603592f272e946663aa6c17e302fa8..da6b030423fa67a42321173c1b96b949fde2c669 100644 (file)
@@ -16,6 +16,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
@@ -46,6 +48,7 @@ public final class VpnHelper {
     private VpnHelper() { }
 
     //FIXME: Implement caches for DS reads
+    @Nullable
     public static VpnInstance getVpnInstance(DataBroker broker, String vpnInstanceName) {
         InstanceIdentifier<VpnInstance> id = InstanceIdentifier.builder(VpnInstances.class).child(VpnInstance.class,
                 new VpnInstanceKey(vpnInstanceName)).build();
@@ -65,7 +68,7 @@ public final class VpnHelper {
     public static List<VpnInstance> getAllVpnInstances(DataBroker broker) {
         InstanceIdentifier<VpnInstances> id = InstanceIdentifier.builder(VpnInstances.class).build();
         Optional<VpnInstances> optVpnInstances = read(broker, LogicalDatastoreType.CONFIGURATION, id);
-        if (optVpnInstances.isPresent()) {
+        if (optVpnInstances.isPresent() && optVpnInstances.get().getVpnInstance() != null) {
             return optVpnInstances.get().getVpnInstance();
         } else {
             return Collections.emptyList();
@@ -104,6 +107,7 @@ public final class VpnHelper {
                         .VpnInstanceKey(vpnName)).build();
     }
 
+    @Nullable
     public static VpnInterface getVpnInterface(DataBroker broker, String vpnInterfaceName) {
         InstanceIdentifier<VpnInterface> id = getVpnInterfaceIdentifier(vpnInterfaceName);
         Optional<VpnInterface> vpnInterface = read(broker, LogicalDatastoreType.CONFIGURATION, id);
@@ -115,6 +119,7 @@ public final class VpnHelper {
                 .child(VpnInterface.class, new VpnInterfaceKey(vpnInterfaceName)).build();
     }
 
+    @Nullable
     public static String getFirstVpnNameFromVpnInterface(final VpnInterface original) {
         List<VpnInstanceNames> optList = original.getVpnInstanceNames();
         if (optList != null && !optList.isEmpty()) {
@@ -124,10 +129,13 @@ public final class VpnHelper {
         }
     }
 
-    public static List<String> getVpnInterfaceVpnInstanceNamesString(List<VpnInstanceNames> vpnInstanceList) {
-        List listVpn = new ArrayList<String>();
-        for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInstanceList) {
-            listVpn.add(vpnInterfaceVpnInstance.getVpnName());
+    @Nonnull
+    public static List<String> getVpnInterfaceVpnInstanceNamesString(@Nullable List<VpnInstanceNames> vpnInstanceList) {
+        List<String> listVpn = new ArrayList<>();
+        if (vpnInstanceList != null) {
+            for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInstanceList) {
+                listVpn.add(vpnInterfaceVpnInstance.getVpnName());
+            }
         }
         return listVpn;
     }
@@ -138,14 +146,18 @@ public final class VpnHelper {
 
     public static void removeVpnInterfaceVpnInstanceNamesFromList(String vpnName,
                                List<VpnInstanceNames> vpnInstanceList) {
-        vpnInstanceList.removeIf(instance -> instance.getVpnName().equals(vpnName));
+        if (vpnInstanceList != null) {
+            vpnInstanceList.removeIf(instance -> vpnName.equals(instance.getVpnName()));
+        }
     }
 
     public static boolean doesVpnInterfaceBelongToVpnInstance(String vpnName,
                                                           List<VpnInstanceNames> vpnInstanceList) {
-        for (VpnInstanceNames vpnInstance : vpnInstanceList) {
-            if (vpnInstance.getVpnName().equals(vpnName)) {
-                return true;
+        if (vpnInstanceList != null) {
+            for (VpnInstanceNames vpnInstance : vpnInstanceList) {
+                if (vpnName.equals(vpnInstance.getVpnName())) {
+                    return true;
+                }
             }
         }
         return false;
@@ -172,6 +184,7 @@ public final class VpnHelper {
      * @param subnetUuid the subnet's Uuid
      * @return the Subnetmap of Uuid or null if it is not found
      */
+    @Nullable
     public static Subnetmap getSubnetmapFromItsUuid(DataBroker broker, Uuid subnetUuid) {
         Subnetmap sn = null;
         InstanceIdentifier<Subnetmap> id = buildSubnetmapIdentifier(subnetUuid);
index d5ec93616e453c7da88e1bd0b51101c2bb35da09..9c2972c219f10ae5669ee6e3175ac0579aea4b2a 100755 (executable)
@@ -8,12 +8,13 @@
 
 package org.opendaylight.netvirt.vpnmanager.api.intervpnlink;
 
+import static java.util.Collections.emptyList;
+
 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.Objects;
+import javax.annotation.Nullable;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.inter.vpn.link.rev160311.inter.vpn.link.states.InterVpnLinkState;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.inter.vpn.link.rev160311.inter.vpn.links.InterVpnLink;
 import org.slf4j.Logger;
@@ -121,6 +122,7 @@ public class InterVpnLinkDataComposite {
                      && ipAddr.equals(getFirstEndpointIpAddr().orNull()));
     }
 
+    @Nullable
     public String getInterVpnLinkName() {
         return (interVpnLinkCfg != null) ? interVpnLinkCfg.getName() : interVpnLinkState.getInterVpnLinkName();
     }
@@ -147,7 +149,7 @@ public class InterVpnLinkDataComposite {
 
     public List<BigInteger> getFirstEndpointDpns() {
         return (!isComplete() || this.interVpnLinkState.getFirstEndpointState().getDpId() == null)
-                   ? Collections.emptyList()
+                   ? emptyList()
                    : this.interVpnLinkState.getFirstEndpointState().getDpId();
     }
 
@@ -173,39 +175,41 @@ public class InterVpnLinkDataComposite {
 
     public List<BigInteger> getSecondEndpointDpns() {
         return (!isComplete() || this.interVpnLinkState.getSecondEndpointState().getDpId() == null)
-                    ? Collections.emptyList()
+                    ? emptyList()
                     : this.interVpnLinkState.getSecondEndpointState().getDpId();
     }
 
+    @Nullable
     public String getVpnNameByIpAddress(String endpointIpAddr) {
         if (!isFirstEndpointIpAddr(endpointIpAddr) && !isSecondEndpointIpAddr(endpointIpAddr)) {
             LOG.debug("Endpoint IpAddress {} does not participate in InterVpnLink {}",
                       endpointIpAddr, getInterVpnLinkName());
             return null;
         }
-        return isFirstEndpointIpAddr(endpointIpAddr) ? getFirstEndpointVpnUuid().get()
-                                                     : getSecondEndpointVpnUuid().get();
+        return isFirstEndpointIpAddr(endpointIpAddr) ? getFirstEndpointVpnUuid().orNull()
+                                                     : getSecondEndpointVpnUuid().orNull();
     }
 
+    @Nullable
     public String getOtherEndpoint(String vpnUuid) {
         if (!isFirstEndpointVpnName(vpnUuid) && !isSecondEndpointVpnName(vpnUuid)) {
             LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnUuid, getInterVpnLinkName());
             return null;
         }
 
-        Optional<String> optEndpointIpAddr = isFirstEndpointVpnName(vpnUuid) ? getSecondEndpointIpAddr()
-                                                                             : getFirstEndpointIpAddr();
-        return optEndpointIpAddr.orNull();
+        return isFirstEndpointVpnName(vpnUuid) ? getSecondEndpointIpAddr().orNull()
+                                               : getFirstEndpointIpAddr().orNull();
     }
 
+    @Nullable
     public String getOtherVpnNameByIpAddress(String endpointIpAddr) {
         if (!isFirstEndpointIpAddr(endpointIpAddr) && !isSecondEndpointIpAddr(endpointIpAddr)) {
             LOG.debug("Endpoint IpAddress {} does not participate in InterVpnLink {}",
                       endpointIpAddr, getInterVpnLinkName());
             return null;
         }
-        return isFirstEndpointIpAddr(endpointIpAddr) ? getSecondEndpointVpnUuid().get()
-                                                     : getFirstEndpointVpnUuid().get();
+        return isFirstEndpointIpAddr(endpointIpAddr) ? getSecondEndpointVpnUuid().orNull()
+                                                     : getFirstEndpointVpnUuid().orNull();
     }
 
     public Optional<Long> getEndpointLportTagByVpnName(String vpnName) {
@@ -236,76 +240,79 @@ public class InterVpnLinkDataComposite {
                                                : Optional.of(interVpnLinkState.getFirstEndpointState().getLportTag());
     }
 
+    @Nullable
     public String getOtherVpnName(String vpnName) {
         if (!isFirstEndpointVpnName(vpnName) && !isSecondEndpointVpnName(vpnName)) {
             LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnName, getInterVpnLinkName());
             return null;
         }
 
-        Optional<String> optOtherVpnName = isFirstEndpointVpnName(vpnName) ? getSecondEndpointVpnUuid()
-                                                                           : getFirstEndpointVpnUuid();
-        return optOtherVpnName.orNull();
+        return isFirstEndpointVpnName(vpnName) ? getSecondEndpointVpnUuid().orNull()
+                                               : getFirstEndpointVpnUuid().orNull();
     }
 
+    @Nullable
     public String getOtherEndpointIpAddr(String vpnUuid) {
         if (!isFirstEndpointVpnName(vpnUuid) && !isSecondEndpointVpnName(vpnUuid)) {
             LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnUuid, getInterVpnLinkName());
             return null;
         }
 
-        Optional<String> optEndpointIpAddr = isFirstEndpointVpnName(vpnUuid) ? getSecondEndpointIpAddr()
-                                                                             : getFirstEndpointIpAddr();
-        return optEndpointIpAddr.orNull();
+        return isFirstEndpointVpnName(vpnUuid) ? getSecondEndpointIpAddr().orNull()
+                                               : getFirstEndpointIpAddr().orNull();
     }
 
+    @Nullable
     public String getEndpointIpAddr(String vpnUuid) {
         if (!isFirstEndpointVpnName(vpnUuid) && !isSecondEndpointVpnName(vpnUuid)) {
             LOG.debug("VPN {} does not participate in InterVpnLink {}", vpnUuid, getInterVpnLinkName());
             return null;
         }
 
-        Optional<String> optEndpointIpAddr = isFirstEndpointVpnName(vpnUuid) ? getFirstEndpointIpAddr()
-                                                                             : getSecondEndpointIpAddr();
-        return optEndpointIpAddr.orNull();
+        return isFirstEndpointVpnName(vpnUuid) ? getFirstEndpointIpAddr().orNull()
+                                               : getSecondEndpointIpAddr().orNull();
     }
 
     public List<BigInteger> getEndpointDpnsByVpnName(String vpnUuid) {
         if (!isComplete()) {
-            return new ArrayList<>();
+            return emptyList();
         }
 
-        return isFirstEndpointVpnName(vpnUuid) ? interVpnLinkState.getFirstEndpointState().getDpId()
-                                               : interVpnLinkState.getSecondEndpointState().getDpId();
+        List<BigInteger> dpns = isFirstEndpointVpnName(vpnUuid) ? interVpnLinkState.getFirstEndpointState().getDpId()
+                                                                : interVpnLinkState.getSecondEndpointState().getDpId();
+        return dpns == null ? emptyList() : dpns;
     }
 
     public List<BigInteger> getOtherEndpointDpnsByVpnName(String vpnUuid) {
-        List<BigInteger> result = new ArrayList<>();
         if (!isComplete()) {
-            return result;
+            return emptyList();
         }
 
-        return isFirstEndpointVpnName(vpnUuid) ? interVpnLinkState.getSecondEndpointState().getDpId()
-                                               : interVpnLinkState.getFirstEndpointState().getDpId();
+        List<BigInteger> dpns = isFirstEndpointVpnName(vpnUuid) ? interVpnLinkState.getSecondEndpointState().getDpId()
+                                                                : interVpnLinkState.getFirstEndpointState().getDpId();
+        return dpns == null ? emptyList() : dpns;
     }
 
     public List<BigInteger> getEndpointDpnsByIpAddr(String endpointIp) {
-        List<BigInteger> result = new ArrayList<>();
         if (!isComplete()) {
-            return result;
+            return emptyList();
         }
 
-        return isFirstEndpointIpAddr(endpointIp) ? this.interVpnLinkState.getFirstEndpointState().getDpId()
-                                                 : this.interVpnLinkState.getSecondEndpointState().getDpId();
+        List<BigInteger> dpns =
+            isFirstEndpointIpAddr(endpointIp) ? this.interVpnLinkState.getFirstEndpointState().getDpId()
+                                              : this.interVpnLinkState.getSecondEndpointState().getDpId();
+        return dpns == null ? emptyList() : dpns;
     }
 
     public List<BigInteger> getOtherEndpointDpnsByIpAddr(String endpointIp) {
-        List<BigInteger> result = new ArrayList<>();
         if (!isComplete()) {
-            return result;
+            return emptyList();
         }
 
-        return isFirstEndpointIpAddr(endpointIp) ? this.interVpnLinkState.getSecondEndpointState().getDpId()
-                                                 : this.interVpnLinkState.getFirstEndpointState().getDpId();
+        List<BigInteger> dpns =
+            isFirstEndpointIpAddr(endpointIp) ? this.interVpnLinkState.getSecondEndpointState().getDpId()
+                                              : this.interVpnLinkState.getFirstEndpointState().getDpId();
+        return dpns == null ? emptyList() : dpns;
     }
 
     @Override
index d48e933e133ce50118703ad6465a7a3a62c7dc61..0038ad42f124b4decd8f862771faa2174f199c3e 100644 (file)
@@ -9,8 +9,10 @@
 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;
@@ -139,7 +141,7 @@ public class CentralizedSwitchChangeListener
             return;
         }
 
-        for (ExternalIps extIp: router.getExternalIps()) {
+        for (ExternalIps extIp : requireNonNullElse(router.getExternalIps(), Collections.<ExternalIps>emptyList())) {
             Uuid subnetVpnName = extIp.getSubnetId();
             if (addOrRemove == NwConstants.ADD_FLOW) {
                 vpnManager.addRouterGwMacFlow(routerName, extGwMacAddress, primarySwitchId, extNetworkId,
index cbef68ac565cabd7fc74902e7719810d63b855e8..eaa7f7a79a4b6bd45931d085e91206dd643eddf2 100644 (file)
@@ -9,6 +9,7 @@
 package org.opendaylight.netvirt.vpnmanager;
 
 import java.math.BigInteger;
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.opendaylight.netvirt.vpnmanager.api.ICentralizedSwitchProvider;
@@ -25,6 +26,7 @@ public class CentralizedSwitchProvider implements ICentralizedSwitchProvider {
     }
 
     @Override
+    @Nullable
     public BigInteger getPrimarySwitchForRouter(String routerName) {
         return vpnUtil.getPrimarySwitchForRouter(routerName);
     }
index 7ec5354617e69fb5076a3747bfa9ebdeadc851f7..88719ad746f5b999703f3bdd40e8a3bc78f32d68 100644 (file)
@@ -7,7 +7,9 @@
  */
 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;
@@ -70,7 +72,7 @@ public class DpnInVpnChangeListener implements OdlL3vpnListener {
                         SingleTransactionDataBroker.syncReadOptional(dataBroker, LogicalDatastoreType.OPERATIONAL, id);
                 if (vpnOpValue.isPresent()) {
                     VpnInstanceOpDataEntry vpnInstOpData = vpnOpValue.get();
-                    List<VpnToDpnList> vpnToDpnList = vpnInstOpData.getVpnToDpnList();
+                    List<VpnToDpnList> vpnToDpnList = requireNonNullElse(vpnInstOpData.getVpnToDpnList(), emptyList());
                     boolean flushDpnsOnVpn = true;
                     for (VpnToDpnList dpn : vpnToDpnList) {
                         if (dpn.getDpnState() == VpnToDpnList.DpnState.Active) {
index 1516de6e91e73eeee64d57327efb06dbd05dec3e..d27165af4cf1ed92b80154fb374e68eaa8ba73d5 100644 (file)
@@ -9,6 +9,7 @@ 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,6 +19,7 @@ import com.google.common.util.concurrent.Futures;
 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.PostConstruct;
 import javax.inject.Inject;
@@ -124,7 +126,8 @@ public class InterfaceStateChangeListener
                                         final VpnInterface vpnIf = vpnUtil.getConfiguredVpnInterface(interfaceName);
                                         if (vpnIf != null) {
                                             for (VpnInstanceNames vpnInterfaceVpnInstance :
-                                                    vpnIf.getVpnInstanceNames()) {
+                                                    requireNonNullElse(vpnIf.getVpnInstanceNames(),
+                                                        Collections.<VpnInstanceNames>emptyList())) {
                                                 String vpnName = vpnInterfaceVpnInstance.getVpnName();
                                                 String primaryRd = vpnUtil.getPrimaryRd(vpnName);
                                                 if (!vpnInterfaceManager.isVpnInstanceReady(vpnName)) {
@@ -205,7 +208,8 @@ public class InterfaceStateChangeListener
                                             return;
                                         }
                                         for (VpnInstanceNames vpnInterfaceVpnInstance :
-                                            cfgVpnInterface.getVpnInstanceNames()) {
+                                                requireNonNullElse(cfgVpnInterface.getVpnInstanceNames(),
+                                                    Collections.<VpnInstanceNames>emptyList())) {
                                             String vpnName = vpnInterfaceVpnInstance.getVpnName();
                                             Optional<VpnInterfaceOpDataEntry> optVpnInterface =
                                                 vpnUtil.getVpnInterfaceOpDataEntry(ifName, vpnName);
@@ -281,7 +285,8 @@ public class InterfaceStateChangeListener
                                             }
                                             if (state.equals(IntfTransitionState.STATE_UP)) {
                                                 for (VpnInstanceNames vpnInterfaceVpnInstance :
-                                                    vpnIf.getVpnInstanceNames()) {
+                                                        requireNonNullElse(vpnIf.getVpnInstanceNames(),
+                                                            Collections.<VpnInstanceNames>emptyList())) {
                                                     String vpnName = vpnInterfaceVpnInstance.getVpnName();
                                                     String primaryRd = vpnUtil.getPrimaryRd(vpnName);
                                                     if (!vpnInterfaceManager.isVpnInstanceReady(vpnName)) {
@@ -302,7 +307,8 @@ public class InterfaceStateChangeListener
                                                 }
                                             } else if (state.equals(IntfTransitionState.STATE_DOWN)) {
                                                 for (VpnInstanceNames vpnInterfaceVpnInstance :
-                                                    vpnIf.getVpnInstanceNames()) {
+                                                        requireNonNullElse(vpnIf.getVpnInstanceNames(),
+                                                            Collections.<VpnInstanceNames>emptyList())) {
                                                     String vpnName = vpnInterfaceVpnInstance.getVpnName();
                                                     LOG.info("VPN Interface update event - intfName {} onto vpnName {}"
                                                         + " running oper-driven DOWN", vpnIf.getName(), vpnName);
index d3cb4e9d9b14a194b4716f2d4234ea3a9432436e..531a226dc4a1caa5a0d718f3110cab1827b6e1ab 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.base.Optional;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -47,6 +48,7 @@ public class SubnetOpDpnManager {
         broker = db;
     }
 
+    @Nullable
     private SubnetToDpn addDpnToSubnet(Uuid subnetId, BigInteger dpnId) {
         try {
             InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier =
@@ -145,7 +147,7 @@ public class SubnetOpDpnManager {
         return subDpn;
     }
 
-    public void addPortOpDataEntry(String intfName, Uuid subnetId, BigInteger dpnId) {
+    public void addPortOpDataEntry(String intfName, Uuid subnetId, @Nullable BigInteger dpnId) {
         try {
             // Add to PortOpData as well.
             PortOpDataEntryBuilder portOpBuilder = null;
index cc1adb62f6bf80301e98711cb6d87e0758743784..f6ef1fc2f7d6dbf581111ecc2ed0a2ffda645d70 100644 (file)
@@ -7,10 +7,13 @@
  */
 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;
@@ -83,7 +86,7 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange
         LOG.trace("{} add: Received interface {} up event", LOGGING_PREFIX, intrf);
         if (L2vlan.class.equals(intrf.getType())) {
             LOG.trace("SubnetRouteInterfaceListener add: Received interface {} up event", intrf);
-            if (intrf.getOperStatus().equals(Interface.OperStatus.Up)) {
+            if (Interface.OperStatus.Up.equals(intrf.getOperStatus())) {
                 List<Uuid> subnetIdList = getSubnetId(intrf);
                 if (subnetIdList.isEmpty()) {
                     LOG.trace("SubnetRouteInterfaceListener add: Port {} doesn't exist in configDS",
@@ -162,8 +165,9 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange
                                 return futures;
                             }
                             boolean interfaceDownEligible = false;
-                            for (VpnInstanceNames vpnInterfaceVpnInstance
-                                    : cfgVpnInterface.get().getVpnInstanceNames()) {
+                            for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(
+                                    cfgVpnInterface.get().getVpnInstanceNames(),
+                                    Collections.<VpnInstanceNames>emptyList())) {
                                 String vpnName = vpnInterfaceVpnInstance.getVpnName();
                                 InstanceIdentifier<VpnInterfaceOpDataEntry> idOper = VpnUtil
                                         .getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName);
@@ -171,10 +175,10 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange
                                         .syncReadOptional(dataBroker, LogicalDatastoreType.OPERATIONAL, idOper);
                                 if (optVpnInterface.isPresent()) {
                                     BigInteger dpnIdLocal = dpnId;
-                                    if (dpnIdLocal.equals(BigInteger.ZERO)) {
+                                    if (BigInteger.ZERO.equals(dpnIdLocal)) {
                                         dpnIdLocal = optVpnInterface.get().getDpnId();
                                     }
-                                    if (!dpnIdLocal.equals(BigInteger.ZERO)) {
+                                    if (!BigInteger.ZERO.equals(dpnIdLocal)) {
                                         interfaceDownEligible = true;
                                         break;
                                     }
@@ -228,8 +232,9 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange
                                 return futures;
                             }
                             boolean interfaceChangeEligible = false;
-                            for (VpnInstanceNames vpnInterfaceVpnInstance
-                                    : cfgVpnInterface.get().getVpnInstanceNames()) {
+                            for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(
+                                    cfgVpnInterface.get().getVpnInstanceNames(),
+                                    Collections.<VpnInstanceNames>emptyList())) {
                                 String vpnName = vpnInterfaceVpnInstance.getVpnName();
                                 InstanceIdentifier<VpnInterfaceOpDataEntry> idOper = VpnUtil
                                         .getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName);
@@ -237,29 +242,28 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange
                                         .syncReadOptional(dataBroker, LogicalDatastoreType.OPERATIONAL, idOper);
                                 if (optVpnInterface.isPresent()) {
                                     BigInteger dpnIdLocal = dpnId;
-                                    if (dpnIdLocal.equals(BigInteger.ZERO)) {
+                                    if (BigInteger.ZERO.equals(dpnIdLocal)) {
                                         dpnIdLocal = optVpnInterface.get().getDpnId();
                                     }
-                                    if (!dpnIdLocal.equals(BigInteger.ZERO)) {
+                                    if (!BigInteger.ZERO.equals(dpnIdLocal)) {
                                         interfaceChangeEligible = true;
                                         break;
                                     }
                                 }
                             }
                             if (interfaceChangeEligible) {
-                                if (update.getOperStatus().equals(Interface.OperStatus.Up)) {
+                                if (Interface.OperStatus.Up.equals(update.getOperStatus())) {
                                     LOG.info("{} update: Received port UP event for interface {} in subnet {}",
                                             LOGGING_PREFIX, update.getName(), subnetId);
                                     vpnSubnetRouteHandler.onInterfaceUp(dpnId, update.getName(), subnetId);
-                                } else if (update.getOperStatus().equals(Interface.OperStatus.Down)
-                                        || update.getOperStatus().equals(Interface.OperStatus.Unknown)) {
+                                } else if (Interface.OperStatus.Down.equals(update.getOperStatus())
+                                        || Interface.OperStatus.Unknown.equals(update.getOperStatus())) {
                                 /*
                                  * If the interface went down voluntarily (or) if the interface is not
                                  * reachable from control-path involuntarily, trigger subnetRoute election
                                  */
                                     LOG.info("{} update: Received port {} event for interface {} in subnet {} ",
-                                            LOGGING_PREFIX, update.getOperStatus()
-                                                    .equals(Interface.OperStatus.Unknown)
+                                            LOGGING_PREFIX, Interface.OperStatus.Unknown.equals(update.getOperStatus())
                                                     ? "UNKNOWN" : "DOWN", update.getName(), subnetId);
                                     vpnSubnetRouteHandler.onInterfaceDown(dpnId, update.getName(), subnetId);
                                 }
@@ -298,7 +302,7 @@ public class SubnetRouteInterfaceStateChangeListener extends AsyncDataTreeChange
             return listSubnetIds;
         }
         List<FixedIps> portIps = port.getFixedIps();
-        if (port.getFixedIps() != null) {
+        if (portIps != null) {
             for (FixedIps portIp : portIps) {
                 listSubnetIds.add(portIp.getSubnetId());
             }
index 36d899f64bac28d004be0d33791da3f52f681d84..2a7759a797c289366e1904c0da4fce1d58f0a7c5 100644 (file)
@@ -7,6 +7,9 @@
  */
 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;
@@ -14,6 +17,7 @@ import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -378,6 +382,7 @@ public class SubnetRoutePacketInHandler implements PacketProcessingListener {
     }
 
     // return only the first VPN subnetopdataentry
+    @Nullable
     private SubnetOpDataEntry getTargetSubnetForPacketOut(long elanTag, String ipAddress) {
         ElanTagName elanInfo = vpnUtil.getElanInfoByElanTag(elanTag);
         if (elanInfo == null) {
@@ -394,7 +399,7 @@ public class SubnetRoutePacketInHandler implements PacketProcessingListener {
                         elanInfo.getName());
                 return null;
             }
-            List<Uuid> subnetList = optionalNetworkMap.get().getSubnetIdList();
+            List<Uuid> subnetList = requireNonNullElse(optionalNetworkMap.get().getSubnetIdList(), emptyList());
             LOG.debug("{} getTargetDpnForPacketOut: Obtained subnetList as {} for network {}", LOGGING_PREFIX,
                     subnetList, elanInfo.getName());
             for (Uuid subnetId : subnetList) {
@@ -432,9 +437,6 @@ public class SubnetRoutePacketInHandler implements PacketProcessingListener {
     }
 
     public boolean isTunnel(String interfaceName) {
-        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
-            .ietf.interfaces.rev140508.interfaces.Interface configIface =
-            interfaceManager.getInterfaceInfoFromConfigDataStore(interfaceName);
-        return configIface.augmentation(IfTunnel.class) != null;
+        return interfaceManager.getInterfaceInfoFromConfigDataStore(interfaceName).augmentation(IfTunnel.class) != null;
     }
 }
index 57ff3485fceba15f80139f49ccccb14819aad2e3..816b4efdd98dd9c9b5305d6348bbd8581be8b282 100644 (file)
@@ -85,7 +85,7 @@ public class SubnetmapChangeListener extends AsyncDataTreeChangeListenerBase<Sub
             return;
         }
         if (subnetmap.getVpnId() != null) {
-            if (subnetmap.getNetworkType().equals(NetworkType.VLAN)) {
+            if (NetworkType.VLAN.equals(subnetmap.getNetworkType())) {
                 vpnUtil.addRouterPortToElanDpnListForVlaninAllDpn(subnetmap.getVpnId().getValue());
             }
         }
@@ -145,7 +145,7 @@ public class SubnetmapChangeListener extends AsyncDataTreeChangeListenerBase<Sub
             return;
         }
         updateVlanDataEntry(subnetmapOriginal.getVpnId(), subnetmapUpdate.getVpnId(), subnetmapUpdate,
-                subnetmapOriginal, elanTag, elanInstanceName);
+                subnetmapOriginal, elanInstanceName);
         if (VpnUtil.getIsExternal(network)) {
             LOG.debug("SubnetMapChangeListener:update: provider subnetwork {} is handling in "
                       + "ExternalSubnetVpnInstanceListener", subnetId.getValue());
@@ -218,14 +218,14 @@ public class SubnetmapChangeListener extends AsyncDataTreeChangeListenerBase<Sub
     }
 
     private void updateVlanDataEntry(Uuid vpnIdOld, Uuid vpnIdNew, Subnetmap subnetmapUpdate,
-            Subnetmap subnetmapOriginal, Long elanTag, String  elanInstanceName) {
+            Subnetmap subnetmapOriginal, String elanInstanceName) {
         if (vpnIdNew != null && vpnIdOld == null) {
-            if (elanInstanceName != null && subnetmapUpdate.getNetworkType().equals(NetworkType.VLAN)) {
+            if (elanInstanceName != null && NetworkType.VLAN.equals(subnetmapUpdate.getNetworkType())) {
                 vpnUtil.addRouterPortToElanDpnListForVlaninAllDpn(vpnIdNew.getValue());
             }
         }
         if (vpnIdOld != null && vpnIdNew == null) {
-            if (subnetmapOriginal.getNetworkType().equals(NetworkType.VLAN)) {
+            if (NetworkType.VLAN.equals(subnetmapOriginal.getNetworkType())) {
                 vpnUtil.removeRouterPortFromElanDpnListForVlanInAllDpn(elanInstanceName, subnetmapOriginal
                         .getRouterInterfacePortId().getValue(), vpnIdOld.getValue());
             }
index 7eab70efeb2e312d230bab47b7f08b208426745f..24fcec01fd87c486f6a7722e659df866554e2d3a 100644 (file)
@@ -7,21 +7,22 @@
  */
 package org.opendaylight.netvirt.vpnmanager;
 
+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;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.math.BigInteger;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.Future;
@@ -186,7 +187,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
         vpnInstanceOpData.stream()
                 .filter(opData -> opData.getVpnToDpnList() != null
                         && opData.getVpnToDpnList().stream().anyMatch(
-                            vpnToDpn -> vpnToDpn.getDpnId().equals(srcDpnId)))
+                            vpnToDpn -> Objects.equals(vpnToDpn.getDpnId(), srcDpnId)))
                 .forEach(opData -> {
                     List<DestPrefixes> prefixes = VpnExtraRouteHelper.getExtraRouteDestPrefixes(dataBroker,
                             opData.getVpnId());
@@ -198,7 +199,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
                         }
                         List<RoutePaths> routePaths = vrfEntry.getRoutePaths();
                         routePaths.forEach(routePath -> {
-                            if (routePath.getNexthopAddress().equals(srcTepIp)) {
+                            if (Objects.equals(routePath.getNexthopAddress(), srcTepIp)) {
                                 String prefix = destPrefix.getDestPrefix();
                                 String vpnPrefixKey = VpnUtil.getVpnNamePrefixKey(opData.getVpnInstanceName(),
                                         prefix);
@@ -275,7 +276,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
                 // Update the adj for the vpninterfaces for a DPN on which TEP is deleted.
                 // Update the adj & VRF for the vpninterfaces for a DPN on which TEP is deleted.
                 // Dont update the adj & VRF for vpninterfaces for a DPN on which TEP is not deleted.
-                String endpointIpForDPN = null;
+                String endpointIpForDPN;
                 try {
                     endpointIpForDPN = InterfaceUtils.getEndpointIpAddressForDPN(dataBroker, srcDpnId);
                 } catch (Exception e) {
@@ -304,7 +305,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
                                     + " destTepIP {} returned with Errors {}", srcDpnId, srcTepIp, destTepIp,
                             rpcResult.getErrors());
                 } else {
-                    srcDpninterfacelist = rpcResult.getResult().getInterfaces();
+                    srcDpninterfacelist = requireNonNullElse(rpcResult.getResult().getInterfaces(), emptyList());
                 }
             } catch (Exception e) {
                 LOG.error("handleTunnelEventForDPN: Exception when querying for GetDpnInterfaceList for srcDpnid {}"
@@ -322,7 +323,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
                                         + " srcTepIP {} destTepIp {} returned with Errors {}", remoteDpnId, srcTepIp,
                                 destTepIp, rpcResult.getErrors());
                     } else {
-                        destDpninterfacelist = rpcResult.getResult().getInterfaces();
+                        destDpninterfacelist = requireNonNullElse(rpcResult.getResult().getInterfaces(), emptyList());
                     }
                 } catch (Exception e) {
                     LOG.error("handleTunnelEventForDPN: Exception when querying for GetDpnInterfaceList"
@@ -335,20 +336,16 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
              * Iterate over the list of VpnInterface for a SrcDpn on which TEP is added or deleted and read the adj.
              * Update the adjacencies with the updated nexthop.
              */
-            Iterator<Interfaces> interfacelistIter = srcDpninterfacelist.iterator();
-            Interfaces interfaces = null;
-            String intfName = null;
             List<Uuid> subnetList = new ArrayList<>();
             Map<Long, String> vpnIdRdMap = new HashMap<>();
             Set<String> listVpnName = new HashSet<>();
 
-            while (interfacelistIter.hasNext()) {
-                interfaces = interfacelistIter.next();
+            for (Interfaces interfaces : srcDpninterfacelist) {
                 if (!L2vlan.class.equals(interfaces.getInterfaceType())) {
                     LOG.info("handleTunnelEventForDPN: Interface {} not of type L2Vlan", interfaces.getInterfaceName());
                     continue;
                 }
-                intfName = interfaces.getInterfaceName();
+                String intfName = interfaces.getInterfaceName();
                 VpnInterface vpnInterface =
                      vpnUtil.getConfiguredVpnInterface(intfName);
                 if (vpnInterface != null) {
@@ -364,14 +361,12 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
              * Iterate over the list of VpnInterface for destDPN and get the prefix .
              * Create remote rule for each of those prefix on srcDPN.
              */
-            interfacelistIter = destDpninterfacelist.iterator();
-            while (interfacelistIter.hasNext()) {
-                interfaces = interfacelistIter.next();
+            for (Interfaces interfaces : destDpninterfacelist) {
                 if (!L2vlan.class.equals(interfaces.getInterfaceType())) {
                     LOG.info("handleTunnelEventForDPN: Interface {} not of type L2Vlan", interfaces.getInterfaceName());
                     continue;
                 }
-                intfName = interfaces.getInterfaceName();
+                String intfName = interfaces.getInterfaceName();
                 VpnInterface vpnInterface =
                         vpnUtil.getConfiguredVpnInterface(intfName);
                 if (vpnInterface != null) {
@@ -477,8 +472,9 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
                     if (opVpnInterface.isPresent()) {
                         VpnInterfaceOpDataEntry vpnInterface  = opVpnInterface.get();
                         AdjacenciesOp adjacencies = vpnInterface.augmentation(AdjacenciesOp.class);
-                        List<Adjacency> adjList = adjacencies != null ? adjacencies.getAdjacency()
-                                : Collections.emptyList();
+                        List<Adjacency> adjList =
+                            adjacencies != null && adjacencies.getAdjacency() != null ? adjacencies.getAdjacency()
+                                : emptyList();
                         String prefix = null;
                         long vpnId = vpnUtil.getVpnId(vpnInterface.getVpnInstanceName());
                         if (vpnIdRdMap.containsKey(vpnId)) {
@@ -578,7 +574,7 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
         DcGatewayIpList dcGatewayIpListConfig =
                 MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, dcGatewayIpListid).orNull();
         if (dcGatewayIpListConfig == null) {
-            return Collections.emptyList();
+            return emptyList();
         }
         return dcGatewayIpListConfig.getDcGatewayIp()
                 .stream()
index 2ddd5621a80eed1eddd927c135952cad7a04abf8..166f81762ed7036407a7146a622be61b0e58ded3 100644 (file)
@@ -19,6 +19,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicBoolean;
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -88,8 +89,8 @@ public class VpnFootprintService implements IVpnFootprintService {
     }
 
     @Override
-    public void updateVpnToDpnMapping(BigInteger dpId, String vpnName, String primaryRd, String interfaceName,
-            ImmutablePair<IpAddresses.IpAddressSource, String> ipAddressSourceValuePair, boolean add) {
+    public void updateVpnToDpnMapping(BigInteger dpId, String vpnName, String primaryRd, @Nullable String interfaceName,
+            @Nullable ImmutablePair<IpAddresses.IpAddressSource, String> ipAddressSourceValuePair, boolean add) {
         long vpnId = vpnUtil.getVpnId(vpnName);
         if (!dpId.equals(BigInteger.ZERO)) {
             if (add) {
index a8b6ec33797aac6e0994a09e7511e1ee974ecfee..8a3d491f8176a6a509835a2e32ee8aafae8a0a8c 100644 (file)
@@ -7,9 +7,11 @@
  */
 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;
@@ -22,6 +24,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.Callable;
+import javax.annotation.Nullable;
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -159,7 +162,9 @@ public class VpnInstanceListener extends AsyncDataTreeChangeListenerBase<VpnInst
         VpnInstance original, VpnInstance update) {
         LOG.trace("VPN-UPDATE: update: VPN event key: {}, value: {}.", identifier, update);
         String vpnName = update.getVpnInstanceName();
-        if ((original.getIpv4Family() != null && update.getIpv4Family() != null)
+        if (original.getIpv4Family() != null && update.getIpv4Family() != null
+                && original.getIpv4Family().getRouteDistinguisher() != null
+                && update.getIpv4Family().getRouteDistinguisher() != null
                 && original.getIpv4Family().getRouteDistinguisher().size()
                 !=  update.getIpv4Family().getRouteDistinguisher().size()) {
             LOG.debug("VPN-UPDATE: VpnInstance:{} updated with new RDs: {} from old RDs: {}", vpnName,
@@ -404,6 +409,7 @@ public class VpnInstanceListener extends AsyncDataTreeChangeListenerBase<VpnInst
         }
     }
 
+    @Nullable
     protected VpnInstanceOpDataEntry getVpnInstanceOpData(String rd) {
         InstanceIdentifier<VpnInstanceOpDataEntry> id = VpnUtil.getVpnInstanceOpDataIdentifier(rd);
         try {
@@ -425,13 +431,15 @@ public class VpnInstanceListener extends AsyncDataTreeChangeListenerBase<VpnInst
                 LOG.info("No DC gateways configured.");
                 return tunnelInterfaceNameList;
             }
-            List<DcGatewayIp> dcGatewayIps = dcGatewayIpListOptional.get().getDcGatewayIp();
+            List<DcGatewayIp> dcGatewayIps =
+                requireNonNullElse(dcGatewayIpListOptional.get().getDcGatewayIp(), emptyList());
             InstanceIdentifier<ExternalTunnelList> externalTunnelListId = InstanceIdentifier
                     .create(ExternalTunnelList.class);
             Optional<ExternalTunnelList> externalTunnelListOptional = SingleTransactionDataBroker.syncReadOptional(
                     dataBroker, LogicalDatastoreType.OPERATIONAL, externalTunnelListId);
             if (externalTunnelListOptional.isPresent()) {
-                List<ExternalTunnel> externalTunnels = externalTunnelListOptional.get().getExternalTunnel();
+                List<ExternalTunnel> externalTunnels =
+                    requireNonNullElse(externalTunnelListOptional.get().getExternalTunnel(), emptyList());
                 List<String> externalTunnelIpList = new ArrayList<>();
                 for (ExternalTunnel externalTunnel: externalTunnels) {
                     externalTunnelIpList.add(externalTunnel.getDestinationDevice());
index 8b99e41378a1eda024e8e05df343cc6258a0b232..f94ea5d9e0de42fda43799afb89c7a46ca8efd3c 100755 (executable)
@@ -7,9 +7,11 @@
  */
 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.base.Preconditions;
@@ -22,7 +24,6 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -32,6 +33,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+import javax.annotation.Nullable;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
@@ -90,6 +92,7 @@ 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;
@@ -229,8 +232,9 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
     // TODO Clean up the exception handling
     @SuppressWarnings("checkstyle:IllegalCatch")
     private void addVpnInterface(final InstanceIdentifier<VpnInterface> identifier, final VpnInterface vpnInterface,
-                             final List<Adjacency> oldAdjs, final List<Adjacency> newAdjs) {
-        for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInterface.getVpnInstanceNames()) {
+                             final @Nullable List<Adjacency> oldAdjs, final @Nullable List<Adjacency> newAdjs) {
+        for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(vpnInterface.getVpnInstanceNames(),
+                Collections.<VpnInstanceNames>emptyList())) {
             String vpnName = vpnInterfaceVpnInstance.getVpnName();
             addVpnInterfaceCall(identifier, vpnInterface, oldAdjs, newAdjs, vpnName);
         }
@@ -262,8 +266,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
     }
 
     private void addVpnInterfaceToVpn(final InstanceIdentifier<VpnInterfaceOpDataEntry> vpnInterfaceOpIdentifier,
-                    final VpnInterface vpnInterface, final List<Adjacency> oldAdjs,
-                    final List<Adjacency> newAdjs,
+                    final VpnInterface vpnInterface, final @Nullable List<Adjacency> oldAdjs,
+                    final @Nullable List<Adjacency> newAdjs,
                     final InstanceIdentifier<VpnInterface> identifier, String vpnName) {
         final VpnInterfaceKey key = identifier.firstKeyOf(VpnInterface.class, VpnInterfaceKey.class);
         final String interfaceName = key.getName();
@@ -383,7 +387,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
             if (opVpnInterface != null) {
                 String opVpnName = opVpnInterface.getVpnInstanceName();
                 String primaryInterfaceIp = null;
-                if (opVpnName.equals(vpnName)) {
+                if (Objects.equals(opVpnName, vpnName)) {
                     // Please check if the primary VRF Entry does not exist for VPNInterface
                     // If so, we have to process ADD, as this might be a DPN Restart with Remove and Add triggered
                     // back to back
@@ -502,7 +506,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                     LOG.trace("No config adjacencies present for vpninterface {}", vpnInterface);
                     return;
                 }
-                List<Adjacency> adjacencies = optAdjacencies.get().getAdjacency();
+                List<Adjacency> adjacencies = requireNonNullElse(optAdjacencies.get().getAdjacency(), emptyList());
                 for (Adjacency adjacency : adjacencies) {
                     if (adjacency.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) {
                         continue;
@@ -601,7 +605,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                     LogicalDatastoreType.OPERATIONAL, path);
             if (adjacencies.isPresent()) {
                 List<Adjacency> nextHops = adjacencies.get().getAdjacency();
-                if (!nextHops.isEmpty()) {
+                if (nextHops != null && !nextHops.isEmpty()) {
                     LOG.debug("advertiseAdjacenciesForVpnToBgp:  NextHops are {} for interface {} on dpn {} for vpn {}"
                             + " rd {}", nextHops, interfaceName, dpnId, vpnName, rd);
                     VpnInstanceOpDataEntry vpnInstanceOpData = vpnUtil.getVpnInstanceOpData(rd);
@@ -678,7 +682,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
         if (adjacencies.isPresent()) {
             List<Adjacency> nextHops = adjacencies.get().getAdjacency();
 
-            if (!nextHops.isEmpty()) {
+            if (nextHops != null && !nextHops.isEmpty()) {
                 LOG.trace("withdrawAdjacenciesForVpnFromBgp: NextHops are {} for interface {} in vpn {} rd {}",
                         nextHops, interfaceName, vpnName, rd);
                 for (Adjacency nextHop : nextHops) {
@@ -694,7 +698,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                         } else {
                             // Perform similar operation as interface delete event for extraroutes.
                             String allocatedRd = nextHop.getVrfId();
-                            for (String nh : nextHop.getNextHopIpList()) {
+                            for (String nh : requireNonNullElse(nextHop.getNextHopIpList(),
+                                    Collections.<String>emptyList())) {
                                 deleteExtraRouteFromCurrentAndImportingVpns(
                                     vpnName, nextHop.getIpAddress(), nh, allocatedRd, interfaceName, writeConfigTxn,
                                     writeOperTx);
@@ -763,7 +768,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
         boolean isL3VpnOverVxLan = VpnUtil.isL3VpnOverVxLan(l3vni);
         VrfEntry.EncapType encapType = isL3VpnOverVxLan ? VrfEntry.EncapType.Vxlan : VrfEntry.EncapType.Mplsgre;
         VpnPopulator registeredPopulator = L3vpnRegistry.getRegisteredPopulator(encapType);
-        List<Adjacency> nextHops = (adjacencies != null) ? adjacencies.getAdjacency() : Collections.emptyList();
+        List<Adjacency> nextHops = (adjacencies != null) ? adjacencies.getAdjacency() : emptyList();
         List<Adjacency> value = new ArrayList<>();
         for (Adjacency nextHop : nextHops) {
             String rd = primaryRd;
@@ -921,7 +926,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
         String srcTepIp = stateTunnelList.getSrcInfo().getTepIp().stringValue();
         BigInteger srcDpnId = new BigInteger(stateTunnelList.getSrcInfo().getTepDeviceId());
         AdjacenciesOp adjacencies = vpnInterface.augmentation(AdjacenciesOp.class);
-        List<Adjacency> adjList = adjacencies != null ? adjacencies.getAdjacency() : new ArrayList<>();
+        List<Adjacency> adjList =
+            adjacencies != null && adjacencies.getAdjacency() != null ? adjacencies.getAdjacency() : emptyList();
         if (adjList.isEmpty()) {
             LOG.trace("updateVpnInterfaceOnTepAdd: Adjacencies are empty for vpnInterface {} on dpn {}",
                     vpnInterface, srcDpnId);
@@ -946,9 +952,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
             List<String> nextHopList = adj.getNextHopIpList();
             // If TEP is added , update the nexthop of primary adjacency.
             // Secondary adj nexthop is already pointing to primary adj IP address.
-            if (nextHopList != null && !nextHopList.isEmpty()) {
-                /* everything right already */
-            } else {
+            if (nextHopList == null || nextHopList.isEmpty()) {
                 isNextHopAddReqd = true;
             }
 
@@ -1176,28 +1180,29 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                                 }
                                 String prefix = vrfEntry.getDestPrefix();
                                 String gwMac = vrfEntry.getGatewayMacAddress();
-                                vrfEntry.getRoutePaths().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);
-                                    }
-                                });
+                                requireNonNullElse(vrfEntry.getRoutePaths(),
+                                    Collections.<RoutePaths>emptyList()).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(),
@@ -1216,7 +1221,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
     public void remove(InstanceIdentifier<VpnInterface> identifier, VpnInterface vpnInterface) {
         final VpnInterfaceKey key = identifier.firstKeyOf(VpnInterface.class, VpnInterfaceKey.class);
         final String interfaceName = key.getName();
-        for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInterface.getVpnInstanceNames()) {
+        for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(vpnInterface.getVpnInstanceNames(),
+                Collections.<VpnInstanceNames>emptyList())) {
             String vpnName = vpnInterfaceVpnInstance.getVpnName();
             removeVpnInterfaceCall(identifier, vpnInterface, vpnName, interfaceName);
         }
@@ -1258,12 +1264,12 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                             txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION, writeInvTxn -> {
                                 LOG.info("remove: - intfName {} onto vpnName {} running config-driven",
                                         interfaceName, vpnName);
-                                BigInteger dpId = BigInteger.ZERO;
-                                int ifIndex = 0;
-                                String gwMacAddress = null;
+                                BigInteger dpId;
+                                int ifIndex;
+                                String gwMacAddress;
                                 InstanceIdentifier<VpnInterfaceOpDataEntry> interfaceId =
                                         VpnUtil.getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName);
-                                Optional<VpnInterfaceOpDataEntry> optVpnInterface = Optional.absent();
+                                Optional<VpnInterfaceOpDataEntry> optVpnInterface;
                                 try {
                                     optVpnInterface = SingleTransactionDataBroker.syncReadOptional(dataBroker,
                                             LogicalDatastoreType.OPERATIONAL, interfaceId);
@@ -1369,7 +1375,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
             String primaryRd = vpnUtil.getVpnRd(vpnName);
             LOG.info("removeAdjacenciesFromVpn: For interface {} on dpn {} RD recovered for vpn {} as rd {}",
                     interfaceName, dpnId, vpnName, primaryRd);
-            if (adjacencies.isPresent() && !adjacencies.get().getAdjacency().isEmpty()) {
+            if (adjacencies.isPresent() && adjacencies.get().getAdjacency() != null
+                    && !adjacencies.get().getAdjacency().isEmpty()) {
                 List<Adjacency> nextHops = adjacencies.get().getAdjacency();
                 LOG.info("removeAdjacenciesFromVpn: NextHops for interface {} on dpn {} for vpn {} are {}",
                         interfaceName, dpnId, vpnName, nextHops);
@@ -1387,12 +1394,12 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                         } else {
                             // This is a primary adjacency
                             nhList = nextHop.getNextHopIpList() != null ? nextHop.getNextHopIpList()
-                                    : Collections.emptyList();
+                                    : emptyList();
                             removeGwMacAndArpResponderFlows(nextHop, vpnId, dpnId, lportTag, gwMac,
                                     interfaceName, writeInvTxn);
                         }
                         if (!nhList.isEmpty()) {
-                            if (rd.equals(vpnName)) {
+                            if (Objects.equals(rd, vpnName)) {
                                 //this is an internal vpn - the rd is assigned to the vpn instance name;
                                 //remove from FIB directly
                                 nhList.forEach(removeAdjacencyFromInternalVpn(nextHop, vpnName,
@@ -1513,7 +1520,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                             + " extra-route/learned-route in rd {} prefix {} interface {} on dpn {}"
                             + " for vpn {}", nextHop.getVrfId(), nextHop.getIpAddress(), interfaceName, dpnId,
                     vpnName);
-            nhList = Collections.emptyList();
+            nhList = emptyList();
         } else {
             nhList = Collections.singletonList(nextHopIp);
         }
@@ -1550,7 +1557,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                         original.getName(), dpnId,
                         VpnHelper.getVpnInterfaceVpnInstanceNamesString(original.getVpnInstanceNames()),
                         VpnHelper.getVpnInterfaceVpnInstanceNamesString(update.getVpnInstanceNames()));
-                return Collections.emptyList();
+                return emptyList();
             }
             updateVpnInstanceAdjChange(original, update, vpnInterfaceName, futures);
             return futures;
@@ -1675,7 +1682,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                 != null ? updateAdjs.getAdjacency() : new ArrayList<>();
 
         final BigInteger dpnId = InterfaceUtils.getDpnForInterface(ifaceMgrRpcService, vpnInterfaceName);
-        for (VpnInstanceNames vpnInterfaceVpnInstance : update.getVpnInstanceNames()) {
+        for (VpnInstanceNames vpnInterfaceVpnInstance : requireNonNullElse(update.getVpnInstanceNames(),
+                Collections.<VpnInstanceNames>emptyList())) {
             String newVpnName = vpnInterfaceVpnInstance.getVpnName();
             List<Adjacency> copyNewAdjs = new ArrayList<>(newAdjs);
             List<Adjacency> copyOldAdjs = new ArrayList<>(oldAdjs);
@@ -1817,12 +1825,9 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                 VrfEntry.EncapType encapType = VpnUtil.getEncapType(isL3VpnOverVxLan);
                 long l3vni = vpnInstanceOpData.getL3vni() == null ? 0L :  vpnInstanceOpData.getL3vni();
                 VpnPopulator populator = L3vpnRegistry.getRegisteredPopulator(encapType);
-                List<Adjacency> adjacencies;
-                if (optAdjacencies.isPresent()) {
-                    adjacencies = optAdjacencies.get().getAdjacency();
-                } else {
-                    // This code will be hit in case of first PNF adjacency
-                    adjacencies = new ArrayList<>();
+                List<Adjacency> adjacencies = new ArrayList<>();
+                if (optAdjacencies.isPresent() && optAdjacencies.get().getAdjacency() != null) {
+                    adjacencies.addAll(optAdjacencies.get().getAdjacency());
                 }
                 long vpnId = vpnUtil.getVpnId(vpnName);
                 L3vpnInput input = new L3vpnInput().setNextHop(adj).setVpnName(vpnName)
@@ -1908,7 +1913,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                                     prefix), pnfPrefix, true);
 
                     fibManager.addOrUpdateFibEntry(adj.getSubnetId().getValue(), adj.getMacAddress(),
-                            adj.getIpAddress(), Collections.emptyList(), null /* EncapType */, 0 /* label */,
+                            adj.getIpAddress(), emptyList(), null /* EncapType */, 0 /* label */,
                             0 /*l3vni*/, null /* gw-mac */, parentVpnRd, RouteOrigin.LOCAL, writeConfigTxn);
 
                     input.setRd(adj.getVrfId());
@@ -1931,6 +1936,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
         }
     }
 
+    @Nullable
     private String getParentVpnRdForExternalSubnet(Adjacency adj) {
         Subnets subnets = vpnUtil.getExternalSubnet(adj.getSubnetId());
         return subnets != null ? subnets.getExternalNetworkId().getValue() : null;
@@ -1952,13 +1958,11 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                 if (optAdjacencies.isPresent()) {
                     List<Adjacency> adjacencies = optAdjacencies.get().getAdjacency();
 
-                    if (!adjacencies.isEmpty()) {
+                    if (adjacencies != null && !adjacencies.isEmpty()) {
                         LOG.trace("delAdjFromVpnInterface: Adjacencies are {}", adjacencies);
-                        Iterator<Adjacency> adjIt = adjacencies.iterator();
-                        while (adjIt.hasNext()) {
-                            Adjacency adjElem = adjIt.next();
-                            if (adjElem.getIpAddress().equals(adj.getIpAddress())) {
-                                String rd = adjElem.getVrfId();
+                        for (Adjacency adjacency : adjacencies) {
+                            if (Objects.equals(adjacency.getIpAddress(), adj.getIpAddress())) {
+                                String rd = adjacency.getVrfId();
                                 if (adj.getNextHopIpList() != null) {
                                     for (String nh : adj.getNextHopIpList()) {
                                         deleteExtraRouteFromCurrentAndImportingVpns(
@@ -2054,7 +2058,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
         Adjacencies adjs = vpnInterface.augmentation(Adjacencies.class);
         String rd = vpnUtil.getVpnRd(vpnName);
         if (adjs != null) {
-            List<Adjacency> adjsList = adjs.getAdjacency();
+            List<Adjacency> adjsList = requireNonNullElse(adjs.getAdjacency(), emptyList());
             for (Adjacency adj : adjsList) {
                 if (adj.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) {
                     String primaryInterfaceIp = adj.getIpAddress();
@@ -2084,7 +2088,6 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                  .getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnName);
         addVpnInterfaceToVpn(vpnInterfaceOpIdentifier, intefaceData.vpnInterface, null, null,
                   intefaceData.identifier, vpnName);
-        return;
     }
 
     private void addToUnprocessedVpnInterfaces(InstanceIdentifier<VpnInterface> identifier,
@@ -2236,8 +2239,8 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                         LOG.debug("There is no adjacency available for vpnInterface:{}", vpnInterface);
                         return;
                     }
-                    List<Adjacency> operationVpnAdjacencies = vpnInterfaceOptional.get()
-                            .augmentation(AdjacenciesOp.class).getAdjacency();
+                    List<Adjacency> operationVpnAdjacencies = requireNonNullElse(vpnInterfaceOptional.get()
+                            .augmentation(AdjacenciesOp.class).getAdjacency(), emptyList());
                     // 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.
@@ -2246,7 +2249,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                     configVpnAdjacencies.stream()
                         .filter(adjacency -> operationVpnAdjacencies.stream()
                                 .noneMatch(operationalAdjacency ->
-                                        operationalAdjacency.getIpAddress().equals(adjacency.getIpAddress())))
+                                    Objects.equals(operationalAdjacency.getIpAddress(), adjacency.getIpAddress())))
                         .forEach(adjacency -> {
                             LOG.debug("Processing the vpnInterface{} for the Ajacency:{}", vpnInterface, adjacency);
                             jobCoordinator.enqueueJob("VPNINTERFACE-" + vpnInterface.getInterfaceName(),
@@ -2264,7 +2267,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
                                                                 .getDpnId(), operTx, confTx, confTx)))));
                                         return futures;
                                     } else {
-                                        return Collections.emptyList();
+                                        return emptyList();
                                     }
                                 });
                         });
index 53db65d69f12483ecbebcd9f3a579e2d3df7e3a9..4f0d7522f5cb17c648de0480878be724850c80c0 100644 (file)
@@ -7,6 +7,8 @@
  */
 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;
@@ -153,7 +155,8 @@ public class VpnInterfaceOpListener extends AsyncDataTreeChangeListenerBase<VpnI
                             prefixToInterfaceLocal.add(prefix.get());
                         }
                         if (prefixToInterfaceLocal.isEmpty()) {
-                            for (String nh : adjacency.getNextHopIpList()) {
+                            for (String nh : requireNonNullElse(adjacency.getNextHopIpList(),
+                                    Collections.<String>emptyList())) {
                                 prefix = SingleTransactionDataBroker.syncReadOptional(dataBroker,
                                         LogicalDatastoreType.OPERATIONAL, VpnUtil.getPrefixToInterfaceIdentifier(
                                                 vpnInstOp.getVpnId(), VpnUtil.getIpPrefix(nh)));
index e04f3297269545d0ec80b5ebf361f34aaf7193ee..5f0f01393d5e3b45e5291ee29a29771df9da8776 100644 (file)
@@ -7,6 +7,8 @@
  */
 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;
@@ -15,10 +17,12 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -190,9 +194,9 @@ public class VpnManagerImpl implements IVpnManager {
     }
 
     @Override
-    public void addExtraRoute(String vpnName, String destination, String nextHop, String rd, String routerID,
-        Long l3vni, RouteOrigin origin, String intfName, Adjacency operationalAdj, VrfEntry.EncapType encapType,
-        @Nonnull TypedWriteTransaction<Configuration> confTx) {
+    public void addExtraRoute(String vpnName, String destination, String nextHop, String rd, @Nullable String routerID,
+        Long l3vni, RouteOrigin origin, @Nullable String intfName, @Nullable Adjacency operationalAdj,
+        VrfEntry.EncapType encapType, @Nonnull TypedWriteTransaction<Configuration> confTx) {
         //add extra route to vpn mapping; advertise with nexthop as tunnel ip
         vpnUtil.syncUpdate(LogicalDatastoreType.OPERATIONAL,
                 VpnExtraRouteHelper.getVpnToExtrarouteVrfIdIdentifier(vpnName, rd != null ? rd : routerID,
@@ -254,8 +258,8 @@ public class VpnManagerImpl implements IVpnManager {
     }
 
     @Override
-    public void delExtraRoute(String vpnName, String destination, String nextHop, String rd, String routerID,
-                              String intfName, @Nonnull TypedWriteTransaction<Configuration> confTx,
+    public void delExtraRoute(String vpnName, String destination, String nextHop, String rd, @Nullable String routerID,
+                              @Nullable String intfName, @Nonnull TypedWriteTransaction<Configuration> confTx,
                               @Nonnull TypedWriteTransaction<Operational> operTx) {
         BigInteger dpnId = null;
         String tunnelIp = nextHop;
@@ -469,7 +473,8 @@ public class VpnManagerImpl implements IVpnManager {
             }
 
             String extIfc = null;
-            for (String dpnInterface : dpnInterfaces.getInterfaces()) {
+            for (String dpnInterface : requireNonNullElse(dpnInterfaces.getInterfaces(),
+                    Collections.<String>emptyList())) {
                 if (interfaceManager.isExternalInterface(dpnInterface)) {
                     extIfc = dpnInterface;
                     break;
@@ -632,6 +637,7 @@ public class VpnManagerImpl implements IVpnManager {
     }
 
     @Override
+    @Nullable
     public VpnInstance getVpnInstance(DataBroker broker, String vpnInstanceName) {
         return vpnUtil.getVpnInstance(vpnInstanceName);
     }
@@ -649,10 +655,11 @@ public class VpnManagerImpl implements IVpnManager {
     @Override
     public VpnPortipToPort getNeutronPortFromVpnPortFixedIp(TypedReadTransaction<Configuration> confTx, String vpnName,
         String fixedIp) {
-        return vpnUtil.getNeutronPortFromVpnPortFixedIp(confTx, vpnName, fixedIp);
+        return VpnUtil.getNeutronPortFromVpnPortFixedIp(confTx, vpnName, fixedIp);
     }
 
     @Override
+    @Nullable
     public VpnPortipToPort getNeutronPortFromVpnPortFixedIp(DataBroker broker, String vpnName, String fixedIp) {
         return vpnUtil.getNeutronPortFromVpnPortFixedIp(vpnName, fixedIp);
     }
@@ -767,7 +774,8 @@ public class VpnManagerImpl implements IVpnManager {
                         Optional<RouteTarget> indirectRts = SingleTransactionDataBroker.syncReadOptional(dataBroker,
                                 LogicalDatastoreType.OPERATIONAL, VpnUtil.getRouteTargetsIdentifier(
                                         routerTarget.getRt(), RouteTarget.RtType.ERT));
-                        if (indirectRts.isPresent() && routerTarget.getAssociatedSubnet() != null) {
+                        if (indirectRts.isPresent() && indirectRts.get().getAssociatedSubnet() != null
+                                && routerTarget.getAssociatedSubnet() != null) {
                             for (AssociatedSubnet associatedSubnet : indirectRts.get().getAssociatedSubnet()) {
                                 if (VpnUtil.areSubnetsOverlapping(associatedSubnet.getCidr(), subnetCidr)) {
                                     LOG.error("doesExistingVpnsHaveConflictingSubnet: There is an indirect overlap for"
@@ -808,7 +816,7 @@ public class VpnManagerImpl implements IVpnManager {
                 } else {
                     for (Iterator<AssociatedVpn> iterator = associatedVpns.iterator(); iterator.hasNext();) {
                         AssociatedVpn associatedVpn = iterator.next();
-                        if (associatedVpn.getName().equals(vpnName)) {
+                        if (Objects.equals(associatedVpn.getName(), vpnName)) {
                             iterator.remove();
                             break;
                         }
@@ -849,7 +857,7 @@ public class VpnManagerImpl implements IVpnManager {
             List<AssociatedSubnet> associatedSubnets = rtToSubnetsAssociation.get().getAssociatedSubnet();
             if (associatedSubnets != null && !associatedSubnets.isEmpty()) {
                 for (Iterator<AssociatedSubnet> iterator = associatedSubnets.iterator(); iterator.hasNext(); ) {
-                    if (iterator.next().getCidr().equals(cidr)) {
+                    if (Objects.equals(iterator.next().getCidr(), cidr)) {
                         iterator.remove();
                         break;
                     }
index bacf5a9e033ae8091e96842088aff4f9a7919190..29d60cd6c2ab090fc901bd0e156eddbec5fb74fa 100644 (file)
@@ -7,6 +7,9 @@
  */
 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;
 import com.google.common.util.concurrent.Futures;
@@ -106,7 +109,7 @@ public class VpnOpStatusListener extends AsyncDataTreeChangeListenerBase<VpnInst
                 && vpnFootprintService.isVpnFootPrintCleared(update)) {
             //Cleanup VPN data
             final String vpnName = update.getVpnInstanceName();
-            final List<String> rds = update.getRd();
+            final List<String> rds = requireNonNullElse(update.getRd(), emptyList());
             String primaryRd = update.getVrfId();
             final long vpnId = vpnUtil.getVpnId(vpnName);
             jobCoordinator.enqueueJob("VPN-" + update.getVpnInstanceName(), () -> {
@@ -241,14 +244,13 @@ public class VpnOpStatusListener extends AsyncDataTreeChangeListenerBase<VpnInst
             }
             jobCoordinator.enqueueJob("VPN-" + update.getVpnInstanceName(), () -> {
                 //RD update case get only updated RD list
-                List<String> rds = update.getRd();
-                if (original.getRd().size() != update.getRd().size()) {
-                    List<String> oldRds = original.getRd();
-                    rds.removeAll(oldRds);
+                List<String> rds = update.getRd() != null ? new ArrayList<>(update.getRd()) : new ArrayList<>();
+                if (original.getRd() != null && original.getRd().size() != rds.size()) {
+                    rds.removeAll(original.getRd());
                 }
                 rds.parallelStream().forEach(rd -> {
                     try {
-                        List<String> importRTList = rd.equals(primaryRd) ? irtList : Collections.emptyList();
+                        List<String> importRTList = rd.equals(primaryRd) ? irtList : emptyList();
                         LOG.info("VpnOpStatusListener.update: updating BGPVPN for vpn {} with RD {}"
                                 + " Type is {}, IPv4 is {}, IPv6 is {}, iRT {}", vpnName, primaryRd, update.getType(),
                                 update.isIpv4Configured(), update.isIpv6Configured(), importRTList);
@@ -281,7 +283,7 @@ public class VpnOpStatusListener extends AsyncDataTreeChangeListenerBase<VpnInst
                                + " for vpn {} rd {}", vpnName, rd);
                     }
                 });
-                return Collections.emptyList();
+                return emptyList();
             });
         }
     }
index b1bde4edf050f9c8e72d449d89e6db60e3b7913e..10230883fb0da19e00ff6cd714cb29a116303498 100644 (file)
@@ -17,6 +17,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -924,8 +925,8 @@ public class VpnSubnetRouteHandler {
 
     // TODO Clean up the exception handling
     @SuppressWarnings("checkstyle:IllegalCatch")
-    private void electNewDpnForSubnetRoute(SubnetOpDataEntryBuilder subOpBuilder, BigInteger oldDpnId, Uuid subnetId,
-                                           Uuid networkId, boolean isBgpVpn) {
+    private void electNewDpnForSubnetRoute(SubnetOpDataEntryBuilder subOpBuilder, @Nullable BigInteger oldDpnId,
+                                           Uuid subnetId, Uuid networkId, boolean isBgpVpn) {
         List<SubnetToDpn> subDpnList = null;
         boolean isRouteAdvertised = false;
         subDpnList = subOpBuilder.getSubnetToDpn();
index 93f3cd11ced587b1f5c4e95b065ffc6b1c8aade9..c14d526c6dbd674fdc2953f38c87586e81ddfef4 100644 (file)
@@ -8,6 +8,8 @@
 
 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;
@@ -31,6 +33,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
@@ -151,6 +154,7 @@ 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;
@@ -320,6 +324,7 @@ public final class VpnUtil {
                 .child(VpnInstance.class, new VpnInstanceKey(vpnName)).build();
     }
 
+    @Nullable
     VpnInterface getVpnInterface(String vpnInterfaceName) {
         InstanceIdentifier<VpnInterface> id = getVpnInterfaceIdentifier(vpnInterfaceName);
         Optional<VpnInterface> vpnInterface = read(LogicalDatastoreType.CONFIGURATION, id);
@@ -375,6 +380,7 @@ public final class VpnUtil {
      * @param rd Route-Distinguisher
      * @return VrfTables that holds the list of VrfEntries of the specified rd
      */
+    @Nullable
     VrfTables getVrfTable(String rd) {
         InstanceIdentifier<VrfTables> id = InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class,
                 new VrfTablesKey(rd)).build();
@@ -410,10 +416,14 @@ public final class VpnUtil {
      */
     public List<VrfEntry> getAllVrfEntries(String rd) {
         VrfTables vrfTables = getVrfTable(rd);
-        return vrfTables != null ? vrfTables.getVrfEntry() : new ArrayList<>();
+        if (vrfTables != null && vrfTables.getVrfEntry() != null) {
+            return vrfTables.getVrfEntry();
+        }
+        return emptyList();
     }
 
     //FIXME: Implement caches for DS reads
+    @Nullable
     public VpnInstance getVpnInstance(String vpnInstanceName) {
         InstanceIdentifier<VpnInstance> id = InstanceIdentifier.builder(VpnInstances.class).child(VpnInstance.class,
             new VpnInstanceKey(vpnInstanceName)).build();
@@ -421,28 +431,36 @@ public final class VpnUtil {
         return vpnInstance.isPresent() ? vpnInstance.get() : null;
     }
 
+    @Nonnull
     List<VpnInstanceOpDataEntry> getAllVpnInstanceOpData() {
         InstanceIdentifier<VpnInstanceOpData> id = InstanceIdentifier.builder(VpnInstanceOpData.class).build();
         Optional<VpnInstanceOpData> vpnInstanceOpDataOptional = read(LogicalDatastoreType.OPERATIONAL, id);
-        return vpnInstanceOpDataOptional.isPresent() ?  vpnInstanceOpDataOptional.get().getVpnInstanceOpDataEntry()
-                : Collections.emptyList();
+        return
+            vpnInstanceOpDataOptional.isPresent() && vpnInstanceOpDataOptional.get().getVpnInstanceOpDataEntry() != null
+                ? vpnInstanceOpDataOptional.get().getVpnInstanceOpDataEntry()
+                : emptyList();
     }
 
+    @Nonnull
     List<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data
             .vpn.instance.op.data.entry.vpn.to.dpn.list.VpnInterfaces> getDpnVpnInterfaces(VpnInstance vpnInstance,
                                                                                            BigInteger dpnId) {
         String primaryRd = getPrimaryRd(vpnInstance);
         InstanceIdentifier<VpnToDpnList> dpnToVpnId = VpnHelper.getVpnToDpnListIdentifier(primaryRd, dpnId);
         Optional<VpnToDpnList> dpnInVpn = read(LogicalDatastoreType.OPERATIONAL, dpnToVpnId);
-        return dpnInVpn.isPresent() ? dpnInVpn.get().getVpnInterfaces() : Collections.emptyList();
+        return dpnInVpn.isPresent() && dpnInVpn.get().getVpnInterfaces() != null ? dpnInVpn.get().getVpnInterfaces()
+            : emptyList();
     }
 
+    @Nonnull
     static List<String> getListOfRdsFromVpnInstance(VpnInstance vpnInstance) {
         VpnAfConfig vpnConfig = vpnInstance.getIpv4Family();
         LOG.trace("vpnConfig {}", vpnConfig);
-        return vpnConfig.getRouteDistinguisher() != null ? vpnConfig.getRouteDistinguisher() : Collections.emptyList();
+        return vpnConfig.getRouteDistinguisher() != null && vpnConfig.getRouteDistinguisher() != null
+            ? vpnConfig.getRouteDistinguisher() : emptyList();
     }
 
+    @Nullable
     VrfEntry getVrfEntry(String rd, String ipPrefix) {
         VrfTables vrfTable = getVrfTable(rd);
         // TODO: why check VrfTables if we later go for the specific VrfEntry?
@@ -458,13 +476,13 @@ public final class VpnUtil {
         return null;
     }
 
+    @Nullable
     public List<Adjacency> getAdjacenciesForVpnInterfaceFromConfig(String intfName) {
         final InstanceIdentifier<VpnInterface> identifier = getVpnInterfaceIdentifier(intfName);
         InstanceIdentifier<Adjacencies> path = identifier.augmentation(Adjacencies.class);
         Optional<Adjacencies> adjacencies = read(LogicalDatastoreType.CONFIGURATION, path);
         if (adjacencies.isPresent()) {
-            List<Adjacency> nextHops = adjacencies.get().getAdjacency();
-            return nextHops;
+            return adjacencies.get().getAdjacency();
         }
         return null;
     }
@@ -473,6 +491,7 @@ public final class VpnUtil {
         return new RoutesBuilder().setPrefix(ipPrefix).setNexthopIpList(nextHopList).build();
     }
 
+    @Nullable
     String getVpnInterfaceName(BigInteger metadata) throws InterruptedException, ExecutionException {
         GetInterfaceFromIfIndexInputBuilder ifIndexInputBuilder = new GetInterfaceFromIfIndexInputBuilder();
         BigInteger lportTag = MetaDataUtil.getLportFromMetadata(metadata);
@@ -609,7 +628,8 @@ public final class VpnUtil {
             ListenableFutures.addErrorLogging(
                     new ManagedNewTransactionRunnerImpl(dataBroker).callWithNewWriteOnlyTransactionAndSubmit(
                                                                             Datastore.CONFIGURATION, tx -> {
-                            for (VrfEntry vrfEntry : vrfTables.getVrfEntry()) {
+                            for (VrfEntry vrfEntry : requireNonNullElse(vrfTables.getVrfEntry(),
+                                    Collections.<VrfEntry>emptyList())) {
                                 if (origin == RouteOrigin.value(vrfEntry.getOrigin())) {
                                     tx.delete(vpnVrfTableIid.child(VrfEntry.class, vrfEntry.key()));
                                 }
@@ -625,8 +645,8 @@ public final class VpnUtil {
         List<VrfEntry> matches = new ArrayList<>();
         if (vrfTablesOpc.isPresent()) {
             VrfTables vrfTables = vrfTablesOpc.get();
-            for (VrfEntry vrfEntry : vrfTables.getVrfEntry()) {
-                vrfEntry.getRoutePaths().stream()
+            for (VrfEntry vrfEntry : requireNonNullElse(vrfTables.getVrfEntry(), Collections.<VrfEntry>emptyList())) {
+                requireNonNullElse(vrfEntry.getRoutePaths(), Collections.<RoutePaths>emptyList()).stream()
                         .filter(routePath -> routePath.getNexthopAddress() != null && routePath.getNexthopAddress()
                                 .equals(nexthop)).findFirst().ifPresent(routePath -> matches.add(vrfEntry));
             }
@@ -719,6 +739,7 @@ public final class VpnUtil {
      * @param vpnId Dataplane identifier of the VPN
      * @return the Vpn instance name
      */
+    @Nullable
     String getVpnName(long vpnId) {
 
         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.id.to.vpn
@@ -738,11 +759,12 @@ public final class VpnUtil {
             .child(VpnInstanceOpDataEntry.class, new VpnInstanceOpDataEntryKey(rd)).build();
     }
 
+    @Nullable
     public VpnInstanceOpDataEntry getVpnInstanceOpData(String rd) {
-        InstanceIdentifier<VpnInstanceOpDataEntry> id = getVpnInstanceOpDataIdentifier(rd);
-        return read(LogicalDatastoreType.OPERATIONAL, id).orNull();
+        return read(LogicalDatastoreType.OPERATIONAL, getVpnInstanceOpDataIdentifier(rd)).orNull();
     }
 
+    @Nullable
     VpnInterface getConfiguredVpnInterface(String interfaceName) {
         InstanceIdentifier<VpnInterface> interfaceId = getVpnInterfaceIdentifier(interfaceName);
         Optional<VpnInterface> configuredVpnInterface = read(LogicalDatastoreType.CONFIGURATION, interfaceId);
@@ -834,6 +856,7 @@ public final class VpnUtil {
     }
 
     // interface-index-tag operational container
+    @Nullable
     IfIndexInterface getInterfaceInfoByInterfaceTag(long interfaceTag) {
         InstanceIdentifier<IfIndexInterface> interfaceId = getInterfaceInfoEntriesOperationalDataPath(interfaceTag);
         Optional<IfIndexInterface> existingInterfaceInfo = read(LogicalDatastoreType.OPERATIONAL, interfaceId);
@@ -848,6 +871,7 @@ public final class VpnUtil {
             new IfIndexInterfaceKey((int) interfaceTag)).build();
     }
 
+    @Nullable
     ElanTagName getElanInfoByElanTag(long elanTag) {
         InstanceIdentifier<ElanTagName> elanId = getElanInfoEntriesOperationalDataPath(elanTag);
         Optional<ElanTagName> existingElanInfo = read(LogicalDatastoreType.OPERATIONAL, elanId);
@@ -894,7 +918,7 @@ public final class VpnUtil {
     }
 
     void scheduleVpnInterfaceForRemoval(String interfaceName, BigInteger dpnId, String vpnInstanceName,
-                                        TypedWriteTransaction<Operational> writeOperTxn) {
+                                        @Nullable TypedWriteTransaction<Operational> writeOperTxn) {
         InstanceIdentifier<VpnInterfaceOpDataEntry> interfaceId =
                 getVpnInterfaceOpDataEntryIdentifier(interfaceName, vpnInstanceName);
         VpnInterfaceOpDataEntry interfaceToUpdate =
@@ -934,7 +958,7 @@ public final class VpnUtil {
     }
 
     void removeLearntVpnVipToPort(String vpnName, String fixedIp,
-                                                   TypedWriteTransaction<Operational> writeOperTxn) {
+                                  @Nullable TypedWriteTransaction<Operational> writeOperTxn) {
         synchronized ((vpnName + fixedIp).intern()) {
             InstanceIdentifier<LearntVpnVipToPort> id = buildLearntVpnVipToPortIdentifier(vpnName, fixedIp);
             if (writeOperTxn != null) {
@@ -948,7 +972,7 @@ public final class VpnUtil {
     }
 
     protected static void removeVpnPortFixedIpToPort(DataBroker broker, String vpnName, String fixedIp,
-                                                     TypedWriteTransaction<Configuration> writeConfigTxn) {
+                                                     @Nullable TypedWriteTransaction<Configuration> writeConfigTxn) {
         synchronized ((vpnName + fixedIp).intern()) {
             InstanceIdentifier<VpnPortipToPort> id = buildVpnPortipToPortIdentifier(vpnName, fixedIp);
             if (writeConfigTxn != null) {
@@ -986,7 +1010,8 @@ public final class VpnUtil {
         return id;
     }
 
-    public void removeLearntVpnVipToPortEvent(String eventId, TypedWriteTransaction<Operational> writeOperTxn) {
+    public void removeLearntVpnVipToPortEvent(String eventId,
+            @Nullable TypedWriteTransaction<Operational> writeOperTxn) {
         InstanceIdentifier<LearntVpnVipToPortEvent> id = buildLearntVpnVipToPortEventIdentifier(eventId);
         if (writeOperTxn != null) {
             writeOperTxn.delete(id);
@@ -1048,6 +1073,7 @@ public final class VpnUtil {
                 new VpnPortipToPortKey(fixedIp, vpnName)).build();
     }
 
+    @Nullable
     public VpnPortipToPort getNeutronPortFromVpnPortFixedIp(String vpnName, String fixedIp) {
         InstanceIdentifier<VpnPortipToPort> id = buildVpnPortipToPortIdentifier(vpnName, fixedIp);
         Optional<VpnPortipToPort> vpnPortipToPortData = read(LogicalDatastoreType.CONFIGURATION, id);
@@ -1057,6 +1083,7 @@ public final class VpnUtil {
         return null;
     }
 
+    @Nullable
     public static VpnPortipToPort getNeutronPortFromVpnPortFixedIp(TypedReadTransaction<Configuration> confTx,
             String vpnName, String fixedIp) {
         InstanceIdentifier<VpnPortipToPort> id = buildVpnPortipToPortIdentifier(vpnName, fixedIp);
@@ -1067,6 +1094,7 @@ public final class VpnUtil {
         }
     }
 
+    @Nullable
     public LearntVpnVipToPort getLearntVpnVipToPort(String vpnName, String fixedIp) {
         InstanceIdentifier<LearntVpnVipToPort> id = buildLearntVpnVipToPortIdentifier(vpnName, fixedIp);
         Optional<LearntVpnVipToPort> learntVpnVipToPort = read(LogicalDatastoreType.OPERATIONAL, id);
@@ -1100,6 +1128,7 @@ public final class VpnUtil {
         return result;
     }
 
+    @Nullable
     String getAssociatedExternalRouter(String extIp) {
         InstanceIdentifier<ExtRouters> extRouterInstanceIndentifier =
                 InstanceIdentifier.builder(ExtRouters.class).build();
@@ -1117,10 +1146,11 @@ public final class VpnUtil {
 
         String routerName = null;
 
-        for (Routers routerData : extRouterData.get().getRouters()) {
-            List<ExternalIps> externalIps = routerData.getExternalIps();
+        for (Routers routerData : requireNonNullElse(extRouterData.get().getRouters(),
+                Collections.<Routers>emptyList())) {
+            List<ExternalIps> externalIps = requireNonNullElse(routerData.getExternalIps(), emptyList());
             for (ExternalIps externalIp : externalIps) {
-                if (externalIp.getIpAddress().equals(extIp)) {
+                if (Objects.equals(externalIp.getIpAddress(), extIp)) {
                     routerName = routerData.getRouterName();
                     break;
                 }
@@ -1131,8 +1161,9 @@ public final class VpnUtil {
             return routerName;
         }
 
-        for (Routers routerData : extRouterData.get().getRouters()) {
-            List<ExternalIps> externalIps = routerData.getExternalIps();
+        for (Routers routerData : requireNonNullElse(extRouterData.get().getRouters(),
+                Collections.<Routers>emptyList())) {
+            List<ExternalIps> externalIps = requireNonNullElse(routerData.getExternalIps(), emptyList());
             for (ExternalIps externalIp : externalIps) {
                 Subnet neutronSubnet = neutronVpnService.getNeutronSubnet(externalIp.getSubnetId());
                 if (neutronSubnet == null) {
@@ -1154,6 +1185,7 @@ public final class VpnUtil {
         return InstanceIdentifier.builder(ExtRouters.class).child(Routers.class, new RoutersKey(routerId)).build();
     }
 
+    @Nullable
     Networks getExternalNetwork(Uuid networkId) {
         InstanceIdentifier<Networks> netsIdentifier = InstanceIdentifier.builder(ExternalNetworks.class)
             .child(Networks.class, new NetworksKey(networkId)).build();
@@ -1161,16 +1193,19 @@ public final class VpnUtil {
         return optionalNets.isPresent() ? optionalNets.get() : null;
     }
 
+    @Nullable
     Uuid getExternalNetworkVpnId(Uuid networkId) {
         Networks extNetwork = getExternalNetwork(networkId);
         return extNetwork != null ? extNetwork.getVpnid() : null;
     }
 
+    @Nonnull
     public List<Uuid> getExternalNetworkRouterIds(Uuid networkId) {
         Networks extNetwork = getExternalNetwork(networkId);
-        return extNetwork != null ? extNetwork.getRouterIds() : Collections.emptyList();
+        return extNetwork != null && extNetwork.getRouterIds() != null ? extNetwork.getRouterIds() : emptyList();
     }
 
+    @Nullable
     Routers getExternalRouter(String routerId) {
         InstanceIdentifier<Routers> id = InstanceIdentifier.builder(ExtRouters.class).child(Routers.class,
                 new RoutersKey(routerId)).build();
@@ -1344,7 +1379,7 @@ public final class VpnUtil {
         final Optional<Subnet> subnet = read(LogicalDatastoreType.CONFIGURATION, subnetidentifier);
         if (subnet.isPresent()) {
             Class<? extends IpVersionBase> ipVersionBase = subnet.get().getIpVersion();
-            if (ipVersionBase.equals(IpVersionV4.class)) {
+            if (IpVersionV4.class.equals(ipVersionBase)) {
                 Subnetmap subnetmap = getSubnetmapFromItsUuid(subnetUuid);
                 if (subnetmap != null && subnetmap.getRouterInterfaceFixedIp() != null) {
                     LOG.trace("getVpnSubnetGatewayIp: Obtained subnetMap {} for vpn interface",
@@ -1364,6 +1399,7 @@ public final class VpnUtil {
         return gwIpAddress;
     }
 
+    @Nullable
     RouterToNaptSwitch getRouterToNaptSwitch(String routerName) {
         InstanceIdentifier<RouterToNaptSwitch> id = InstanceIdentifier.builder(NaptSwitches.class)
                 .child(RouterToNaptSwitch.class, new RouterToNaptSwitchKey(routerName)).build();
@@ -1377,6 +1413,7 @@ public final class VpnUtil {
 
     }
 
+    @Nullable
     BigInteger getPrimarySwitchForRouter(String routerName) {
         RouterToNaptSwitch routerToNaptSwitch = getRouterToNaptSwitch(routerName);
         return routerToNaptSwitch != null ? routerToNaptSwitch.getPrimarySwitchId() : null;
@@ -1500,7 +1537,7 @@ public final class VpnUtil {
 
     public static List<String> getIpsListFromExternalIps(List<ExternalIps> externalIps) {
         if (externalIps == null) {
-            return Collections.emptyList();
+            return emptyList();
         }
 
         return externalIps.stream().map(ExternalIps::getIpAddress).collect(Collectors.toList());
@@ -1572,6 +1609,7 @@ public final class VpnUtil {
         return isVxLan ? VrfEntryBase.EncapType.Vxlan : VrfEntryBase.EncapType.Mplsgre;
     }
 
+    @Nullable
     org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.external.subnets.Subnets
         getExternalSubnet(Uuid subnetId) {
         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.external.subnets
@@ -1583,11 +1621,12 @@ public final class VpnUtil {
         return optionalSubnets.isPresent() ? optionalSubnets.get() : null;
     }
 
+    @Nullable
     public Uuid getSubnetFromExternalRouterByIp(Uuid routerId, String ip) {
         Routers externalRouter = getExternalRouter(routerId.getValue());
         if (externalRouter != null && externalRouter.getExternalIps() != null) {
             for (ExternalIps externalIp : externalRouter.getExternalIps()) {
-                if (externalIp.getIpAddress().equals(ip)) {
+                if (Objects.equals(externalIp.getIpAddress(), ip)) {
                     return externalIp.getSubnetId();
                 }
             }
@@ -1605,28 +1644,25 @@ public final class VpnUtil {
     }
 
     @SuppressWarnings("checkstyle:linelength")
+    @Nullable
     Network getNeutronNetwork(Uuid networkId) {
-        Network network = null;
         LOG.debug("getNeutronNetwork for {}", networkId.getValue());
         InstanceIdentifier<Network> inst = InstanceIdentifier.create(Neutron.class).child(
                 org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.networks.rev150712.networks.attributes.Networks.class).child(
                 Network.class, new NetworkKey(networkId));
-        Optional<Network> net = read(LogicalDatastoreType.CONFIGURATION, inst);
-        if (net.isPresent()) {
-            network = net.get();
-        }
-        return network;
+        return read(LogicalDatastoreType.CONFIGURATION, inst).orNull();
     }
 
-    public static boolean isEligibleForBgp(String rd, String vpnName, BigInteger dpnId, String networkName) {
+    public static boolean isEligibleForBgp(@Nullable String rd, @Nullable String vpnName, @Nullable BigInteger dpnId,
+            @Nullable String networkName) {
         if (rd != null) {
-            if (vpnName != null && rd.equals(vpnName)) {
+            if (rd.equals(vpnName)) {
                 return false;
             }
             if (dpnId != null && rd.equals(dpnId.toString())) {
                 return false;
             }
-            if (networkName != null && rd.equals(networkName)) {
+            if (rd.equals(networkName)) {
                 return false;
             }
             return true;
@@ -1726,14 +1762,10 @@ public final class VpnUtil {
      * @param subnetUuid the subnet's Uuid
      * @return the Subnetmap of Uuid or null if it is not found
      */
+    @Nullable
     public Subnetmap getSubnetmapFromItsUuid(Uuid subnetUuid) {
-        Subnetmap sn = null;
         InstanceIdentifier<Subnetmap> id = buildSubnetmapIdentifier(subnetUuid);
-        Optional<Subnetmap> optionalSn = read(LogicalDatastoreType.CONFIGURATION, id);
-        if (optionalSn.isPresent()) {
-            sn = optionalSn.get();
-        }
-        return sn;
+        return read(LogicalDatastoreType.CONFIGURATION, id).orNull();
     }
 
     boolean isAdjacencyEligibleToVpnInternet(Adjacency adjacency) {
@@ -1759,6 +1791,7 @@ public final class VpnUtil {
         return adjacencyEligible;
     }
 
+    @Nullable
     String getInternetVpnFromVpnInstanceList(List<VpnInstanceNames> vpnInstanceList) {
         for (VpnInstanceNames vpnInstance : vpnInstanceList) {
             String vpnName = vpnInstance.getVpnName();
@@ -1804,7 +1837,6 @@ public final class VpnUtil {
      * @return the IpVersionChoice of the version or IpVersionChoice.UNDEFINED otherwise
      */
     public static IpVersionChoice getIpVersionFromString(String ipAddress) {
-        IpVersionChoice ipchoice = IpVersionChoice.UNDEFINED;
         int indexIpAddress = ipAddress.indexOf('/');
         if (indexIpAddress >= 0) {
             ipAddress = ipAddress.substring(0, indexIpAddress);
@@ -1817,9 +1849,9 @@ public final class VpnUtil {
                 return IpVersionChoice.IPV6;
             }
         } catch (UnknownHostException | SecurityException e) {
-            ipchoice = IpVersionChoice.UNDEFINED;
+            return IpVersionChoice.UNDEFINED;
         }
-        return ipchoice;
+        return IpVersionChoice.UNDEFINED;
     }
 
     ListenableFuture<Void> unsetScheduledToRemoveForVpnInterface(String interfaceName) {
@@ -1903,7 +1935,8 @@ public final class VpnUtil {
             Optional<ElanDpnInterfacesList> dpnInElanInterfaces = read(LogicalDatastoreType.OPERATIONAL,
                     elanDpnInterfaceId);
             if (dpnInElanInterfaces.isPresent()) {
-                List<DpnInterfaces> dpnInterfaces = dpnInElanInterfaces.get().getDpnInterfaces();
+                List<DpnInterfaces> dpnInterfaces =
+                    requireNonNullElse(dpnInElanInterfaces.get().getDpnInterfaces(), emptyList());
                 for (DpnInterfaces dpnInterface : dpnInterfaces) {
                     dpnIdSet.add(dpnInterface.getDpId());
                 }
@@ -1962,6 +1995,7 @@ public final class VpnUtil {
 
     }
 
+    @Nullable
     ElanInterface getElanInterfaceByElanInterfaceName(String elanInterfaceName) {
         InstanceIdentifier<ElanInterface> elanInterfaceId = getElanInterfaceConfigurationDataPathId(elanInterfaceName);
         return read(LogicalDatastoreType.CONFIGURATION, elanInterfaceId).orNull();
@@ -1972,12 +2006,14 @@ public final class VpnUtil {
                 .child(ElanInterface.class, new ElanInterfaceKey(interfaceName)).build();
     }
 
+    @Nullable
     DpnInterfaces getElanInterfaceInfoByElanDpn(String elanInstanceName, BigInteger dpId) {
         InstanceIdentifier<DpnInterfaces> elanDpnInterfacesId = getElanDpnInterfaceOperationalDataPath(elanInstanceName,
                 dpId);
         return read(LogicalDatastoreType.OPERATIONAL, elanDpnInterfacesId).orNull();
     }
 
+    @Nullable
     String getExternalElanInterface(String elanInstanceName, BigInteger dpnId) {
         DpnInterfaces dpnInterfaces = getElanInterfaceInfoByElanDpn(elanInstanceName, dpnId);
         if (dpnInterfaces == null || dpnInterfaces.getInterfaces() == null) {
@@ -2008,12 +2044,14 @@ public final class VpnUtil {
         return isVlan(elanInstance);
     }
 
+    @Nullable
     ElanInstance getElanInstanceByName(String elanInstanceName) {
         InstanceIdentifier<ElanInstance> elanIdentifierId =
                 ElanHelper.getElanInstanceConfigurationDataPath(elanInstanceName);
         return read(LogicalDatastoreType.CONFIGURATION, elanIdentifierId).orNull();
     }
 
+    @Nullable
     String getVpnNameFromElanIntanceName(String elanInstanceName) {
         Optional<Subnetmaps> subnetMapsData = read(LogicalDatastoreType.CONFIGURATION, buildSubnetMapsWildCardPath());
         if (subnetMapsData.isPresent()) {
@@ -2039,7 +2077,7 @@ public final class VpnUtil {
             if (subnetMapList != null && !subnetMapList.isEmpty()) {
                 for (Subnetmap subnet : subnetMapList) {
                     if (subnet.getVpnId() != null && subnet.getVpnId().getValue().equals(vpnName)
-                            && subnet.getNetworkType().equals(NetworkType.VLAN)) {
+                            && NetworkType.VLAN.equals(subnet.getNetworkType())) {
                         if (subnet.getRouterInterfacePortId() == null || subnet.getNetworkId() == null) {
                             LOG.warn("The RouterInterfacePortId or NetworkId is null");
                             continue;
@@ -2055,6 +2093,7 @@ public final class VpnUtil {
         return elanInstanceRouterPortMap;
     }
 
+    @Nullable
     String getRouterPordIdFromElanInstance(String elanInstanceName) {
         Optional<Subnetmaps> subnetMapsData = read(LogicalDatastoreType.CONFIGURATION, buildSubnetMapsWildCardPath());
         if (subnetMapsData.isPresent()) {
@@ -2072,7 +2111,7 @@ public final class VpnUtil {
         return null;
     }
 
-    boolean shouldPopulateFibForVlan(String vpnName, String elanInstanceName, BigInteger dpnId) {
+    boolean shouldPopulateFibForVlan(String vpnName, @Nullable String elanInstanceName, BigInteger dpnId) {
         Map<String,String> elanInstanceRouterPortMap = getElanInstanceRouterPortMap(vpnName);
         boolean shouldPopulateFibForVlan = false;
         if (!elanInstanceRouterPortMap.isEmpty()) {
@@ -2260,7 +2299,7 @@ public final class VpnUtil {
     }
 
     public List<String> getVpnListForVpnInterface(VpnInterface vpnInter) {
-        return vpnInter.getVpnInstanceNames().stream()
+        return requireNonNullElse(vpnInter.getVpnInstanceNames(), Collections.<VpnInstanceNames>emptyList()).stream()
                 .map(VpnInstanceNames::getVpnName).collect(Collectors.toList());
     }
 
@@ -2285,4 +2324,10 @@ public final class VpnUtil {
                 }));
         });
     }
+
+    // Use Objects.requireNonNullElse instead with JDK9+
+    @Nonnull
+    public static <T> T requireNonNullElse(@Nullable T obj, @Nonnull T defaultObj) {
+        return obj != null ? obj : requireNonNull(defaultObj);
+    }
 }
index ef49e6cfa1971cc214742c7d5fb8e9f722e221f4..c5f05d9c74ccc29f7bdd585564a4e20db3c99a34 100755 (executable)
@@ -7,7 +7,9 @@
  */
 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;
@@ -17,7 +19,9 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
+import javax.annotation.Nullable;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
@@ -49,6 +53,7 @@ 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;
@@ -160,7 +165,7 @@ public class IVpnLinkServiceImpl implements IVpnLinkService, AutoCloseable {
     @SuppressWarnings("checkstyle:IllegalCatch")
     @Override
     public void leakRoute(InterVpnLinkDataComposite interVpnLink, String srcVpnUuid, String dstVpnUuid,
-                          String prefix, Long label, RouteOrigin forcedOrigin) {
+                          String prefix, Long label, @Nullable RouteOrigin forcedOrigin) {
         String ivpnLinkName = interVpnLink.getInterVpnLinkName();
         // The source VPN must participate in the InterVpnLink
         Preconditions.checkArgument(interVpnLink.isVpnLinked(srcVpnUuid),
@@ -307,8 +312,8 @@ public class IVpnLinkServiceImpl implements IVpnLinkService, AutoCloseable {
         String vpn2Endpoint = vpnLink.getOtherEndpointIpAddr(vpn2Uuid);
         List<VrfEntry> allVpnVrfEntries = vpnUtil.getAllVrfEntries(vpn1Rd);
         for (VrfEntry vrfEntry : allVpnVrfEntries) {
-            vrfEntry.getRoutePaths().stream()
-                    .filter(routePath -> routePath.getNexthopAddress().equals(vpn2Endpoint))
+            requireNonNullElse(vrfEntry.getRoutePaths(), Collections.<RoutePaths>emptyList()).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
                         // the BGP accordingly
@@ -354,7 +359,7 @@ public class IVpnLinkServiceImpl implements IVpnLinkService, AutoCloseable {
             return new HashMap<>();
         }
         Map<String,String> vmap = new HashMap<>();
-        final List<VpnMap> VpnMapList = optVpnMaps.get().getVpnMap();
+        final List<VpnMap> VpnMapList = requireNonNullElse(optVpnMaps.get().getVpnMap(), emptyList());
         for (VpnMap map : VpnMapList) {
             if (map.getRouterIds() == null) {
                 continue;
@@ -390,7 +395,7 @@ public class IVpnLinkServiceImpl implements IVpnLinkService, AutoCloseable {
 
             return;
         }
-        List<Router> routers = routerOpData.get().getRouter();
+        List<Router> routers = requireNonNullElse(routerOpData.get().getRouter(), emptyList());
         for (Router router : routers) {
             String vpnId = routerXL3VpnMap.get(router.getUuid().getValue());
             if (vpnId == null) {
index d741290b52df5d14fa55bee379f79f74e7c31b38..973c7853f70ff1bdfe35aca3497dcdd2b402b206 100644 (file)
@@ -8,11 +8,15 @@
 
 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;
+import javax.annotation.Nullable;
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -67,7 +71,8 @@ public class InterVpnLinkCacheImpl implements InterVpnLinkCache {
             return; // Nothing to be added to cache
         }
         InterVpnLinks interVpnLinks = optIVpnLinksOpData.get();
-        for (InterVpnLink interVpnLink : interVpnLinks.getInterVpnLink()) {
+        for (InterVpnLink interVpnLink : requireNonNullElse(interVpnLinks.getInterVpnLink(),
+                Collections.<InterVpnLink>emptyList())) {
             addInterVpnLinkToCaches(interVpnLink);
         }
 
@@ -81,7 +86,8 @@ public class InterVpnLinkCacheImpl implements InterVpnLinkCache {
             return;
         }
         InterVpnLinkStates interVpnLinkStates = optIVpnLinkStateOpData.get();
-        for (InterVpnLinkState interVpnLinkState : interVpnLinkStates.getInterVpnLinkState()) {
+        for (InterVpnLinkState interVpnLinkState : requireNonNullElse(interVpnLinkStates.getInterVpnLinkState(),
+                Collections.<InterVpnLinkState>emptyList())) {
             addInterVpnLinkStateToCaches(interVpnLinkState);
         }
     }
@@ -200,17 +206,18 @@ public class InterVpnLinkCacheImpl implements InterVpnLinkCache {
         return ImmutableList.copyOf(nameToInterVpnLinkCache.values());
     }
 
-    private <T> void safeRemove(ConcurrentMap<T, ?> fromMap, T key) {
+    private <T> void safeRemove(ConcurrentMap<T, ?> fromMap, @Nullable T key) {
         if (key != null) {
             fromMap.remove(key);
         }
     }
 
-    private <K, V> V safeGet(ConcurrentMap<K, V> fromMap, K key) {
+    @Nullable
+    private <K, V> V safeGet(ConcurrentMap<K, V> fromMap, @Nullable K key) {
         return key != null ? fromMap.get(key) : null;
     }
 
-    private <K, V> void safePut(ConcurrentMap<K, V> toMap, K key, V value) {
+    private <K, V> void safePut(ConcurrentMap<K, V> toMap, @Nullable K key, V value) {
         if (key != null) {
             toMap.put(key, value);
         }
index 9c26f5584dc443201293e00d2eb95995267ba705..1c2f059c608701160b723a1e8960acdcceaa9152 100644 (file)
@@ -12,9 +12,11 @@ import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
 import javax.inject.Inject;
 import javax.inject.Singleton;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
@@ -85,7 +87,7 @@ public class InterVpnLinkLocator {
         int pendingDPNs = numberOfDpns - result.size();
 
         List<BigInteger> dpnsToAvoid = findDpnsWithSimilarIVpnLinks(interVpnLink, allInterVpnLinks);
-        result.addAll(dpnIdPool.stream().filter(dpId -> dpnsToAvoid == null || !dpnsToAvoid.contains(dpId))
+        result.addAll(dpnIdPool.stream().filter(dpId -> !dpnsToAvoid.contains(dpId))
                                .limit(pendingDPNs).collect(Collectors.toList()));
 
         int currentNbrOfItems = result.size();
@@ -133,6 +135,7 @@ public class InterVpnLinkLocator {
      * @return the list of dpnIds where the specified InterVpnLink should not
      *     be installed
      */
+    @Nonnull
     private List<BigInteger> findDpnsWithSimilarIVpnLinks(InterVpnLink interVpnLink,
                                                           List<InterVpnLinkDataComposite> allInterVpnLinks) {
         List<InterVpnLinkDataComposite> sameGroupInterVpnLinks = findInterVpnLinksSameGroup(interVpnLink,
@@ -158,8 +161,8 @@ public class InterVpnLinkLocator {
             return new ArrayList<>();
         }
         return vpnTargets.stream()
-            .filter(target -> target.getVrfRTType().equals(rtType)
-                || target.getVrfRTType().equals(VpnTarget.VrfRTType.Both))
+            .filter(target -> Objects.equals(target.getVrfRTType(), rtType)
+                || Objects.equals(target.getVrfRTType(), VpnTarget.VrfRTType.Both))
             .map(VpnTarget::getVrfRTValue)
             .collect(Collectors.toList());
     }
@@ -175,7 +178,7 @@ public class InterVpnLinkLocator {
         if (irts1 == null && irts2 == null) {
             return true;
         }
-        if (irts1 == null && irts2 != null || irts1 != null && irts2 == null) {
+        if (irts1 == null || irts2 == null) {
             return false;
         }
 
index b47cfd07391efe001e267ecc876e5607d1e097a1..e60d1a98a3e4726700a7bdabd3059ca5d26f5cc5 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.netvirt.vpnmanager.iplearn;
 
 import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.Callable;
 import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
@@ -26,6 +27,6 @@ public class IpMonitorStartTask implements Callable<List<ListenableFuture<Void>>
     @Override
     public List<ListenableFuture<Void>> call() {
         alivenessMonitorUtils.startIpMonitoring(macEntry, arpMonitorProfileId);
-        return null;
+        return Collections.emptyList();
     }
 }
index 7f6fc7b1f3a112a420659e4b288020955aa08a53..cd6e35d84b803ac4211d08a9f116124280a7031b 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.netvirt.vpnmanager.iplearn;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.Callable;
 import org.opendaylight.netvirt.vpnmanager.VpnUtil;
 import org.opendaylight.netvirt.vpnmanager.iplearn.model.MacEntry;
@@ -36,15 +37,13 @@ public class IpMonitorStopTask implements Callable<List<ListenableFuture<Void>>>
     public List<ListenableFuture<Void>> call() {
         final List<ListenableFuture<Void>> futures = new ArrayList<>();
         java.util.Optional<Long> monitorIdOptional = AlivenessMonitorUtils.getMonitorIdFromInterface(macEntry);
-        monitorIdOptional.ifPresent(monitorId -> {
-            alivenessMonitorUtils.stopIpMonitoring(monitorId);
-        });
+        monitorIdOptional.ifPresent(alivenessMonitorUtils::stopIpMonitoring);
 
         String learntIp = macEntry.getIpAddress().getHostAddress();
         if (this.isRemoveMipAdjAndLearntIp) {
             String vpnName =  macEntry.getVpnName();
             LearntVpnVipToPort vpnVipToPort = vpnUtil.getLearntVpnVipToPort(vpnName, learntIp);
-            if (vpnVipToPort != null && !vpnVipToPort.getCreationTime().equals(macEntry.getCreatedTime())) {
+            if (vpnVipToPort != null && !Objects.equals(vpnVipToPort.getCreationTime(), macEntry.getCreatedTime())) {
                 LOG.warn("The MIP {} over vpn {} has been learnt again and processed. "
                         + "Ignoring this remove event.", learntIp, vpnName);
                 return futures;
index 934eaed0c4e0e03148ee8febf06a2fe1ee999dbe..2f85f8d04c56b7341e3e73baba44411df8230845 100644 (file)
@@ -7,12 +7,17 @@
  */
 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.util.concurrent.ListenableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.Callable;
+import javax.annotation.Nullable;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
@@ -39,6 +44,7 @@ import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev14081
 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.AdjacencyList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortEventAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortEventData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
@@ -191,8 +197,8 @@ public class LearntVpnVipToPortEventProcessor
                                 .withKey(new AdjacencyKey(ip)).setAdjacencyType(AdjacencyType.PrimaryAdjacency)
                                 .setMacAddress(mipMacAddress).setSubnetId(new Uuid(subnetId)).setPhysNetworkFunc(true);
 
-                        List<Adjacency> adjacencyList = adjacencies.isPresent()
-                                ? adjacencies.get().getAdjacency() : new ArrayList<>();
+                        List<Adjacency> adjacencyList = new ArrayList<>(requireNonNullElse(
+                            adjacencies.toJavaUtil().map(AdjacencyList::getAdjacency).orElse(null), emptyList()));
 
                         adjacencyList.add(newAdjBuilder.build());
 
@@ -213,11 +219,12 @@ public class LearntVpnVipToPortEventProcessor
                     }
 
                     if (adjacencies.isPresent()) {
-                        List<Adjacency> adjacencyList = adjacencies.get().getAdjacency();
+                        List<Adjacency> adjacencyList =
+                            requireNonNullElse(adjacencies.get().getAdjacency(), emptyList());
                         ip = VpnUtil.getIpPrefix(ip);
                         for (Adjacency adjacs : adjacencyList) {
                             if (adjacs.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) {
-                                if (adjacs.getIpAddress().equals(ip)) {
+                                if (Objects.equals(adjacs.getIpAddress(), ip)) {
                                     LOG.error("The MIP {} is already present as a primary adjacency for interface {}"
                                             + "vpn {} Skipping adjacency addition.", ip, vpnInterface, vpnInstName);
                                     return;
@@ -272,14 +279,15 @@ public class LearntVpnVipToPortEventProcessor
             }
         }
 
+        @Nullable
         private String getSubnetId(String vpnInstName, String ip) {
             // Check if this IP belongs to a router_interface
             VpnPortipToPort vpnPortipToPort =
                     vpnUtil.getNeutronPortFromVpnPortFixedIp(vpnInstName, ip);
             if (vpnPortipToPort != null && vpnPortipToPort.isSubnetIp()) {
-                List<Adjacency> adjacecnyList = vpnUtil.getAdjacenciesForVpnInterfaceFromConfig(
-                        vpnPortipToPort.getPortName());
-                for (Adjacency adjacency : adjacecnyList) {
+                List<Adjacency> adjacencies = requireNonNullElse(vpnUtil.getAdjacenciesForVpnInterfaceFromConfig(
+                        vpnPortipToPort.getPortName()), emptyList());
+                for (Adjacency adjacency : adjacencies) {
                     if (adjacency.getAdjacencyType() == AdjacencyType.PrimaryAdjacency) {
                         return adjacency.getSubnetId().getValue();
                     }
index 2aa85e2c4d62611ef5d411e4168333c79f51743d..1d876dde338c74aaa03e810b121858cd8c8a996b 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.netvirt.vpnmanager.iplearn.ipv4;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
+import javax.annotation.Nullable;
 import org.opendaylight.genius.mdsalutil.ActionInfo;
 import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.genius.mdsalutil.NWUtil;
@@ -50,6 +51,7 @@ public final class ArpUtils {
             ingress, lstActionInfo);
     }
 
+    @Nullable
     public static TransmitPacketInput createArpRequestInput(BigInteger dpnId, Long groupId, byte[] abySenderMAC,
             byte[] abyTargetMAC, byte[] abySenderIpAddress, byte[] abyTargetIpAddress, NodeConnectorRef ingress,
             List<ActionInfo> lstActionInfo) {
index 203e7abc82d6bd12690761c480601fe8759d4b70..92ec5ef98bab2d0f2e0bc47e7dbf59ea9cb00605 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.netvirt.vpnmanager.populator.impl;
 
+import static java.util.Collections.singletonList;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -81,7 +83,7 @@ public class L3vpnOverMplsGrePopulator extends L3vpnPopulator {
         if (VpnUtil.isEligibleForBgp(primaryRd, input.getVpnName(), input.getDpnId(), input.getNetworkName())) {
             // the DpnId is set as rd in case of extra routes present in router based VPN
             addToLabelMapper(label, input.getDpnId(), nextHopIpAddress,
-                    Arrays.asList(nextHopIp), vpnId, input.getInterfaceName(), null,false,
+                    singletonList(nextHopIp), vpnId, input.getInterfaceName(), null,false,
                     primaryRd);
             Objects.requireNonNull(input.getRouteOrigin(), "RouteOrigin is mandatory");
             addPrefixToBGP(rd, primaryRd, null /*macAddress*/, nextHopIpAddress, nextHopIp, encapType,
@@ -126,7 +128,7 @@ public class L3vpnOverMplsGrePopulator extends L3vpnPopulator {
             throw new NullPointerException(error);
         }
         List<String> nextHopList = adjNextHop != null && !adjNextHop.isEmpty() ? adjNextHop
-                : nextHopIp == null ? Collections.emptyList() : Collections.singletonList(nextHopIp);
+                : nextHopIp == null ? Collections.emptyList() : singletonList(nextHopIp);
 
         return new AdjacencyBuilder(nextHop).setLabel(label).setNextHopIpList(nextHopList)
                 .setIpAddress(prefix).setVrfId(rd).withKey(new AdjacencyKey(prefix))
index f47793d4421ca80877693bf8069f1b8df7b4787f..b149fa6d8cb6bc29d87bfbd87cf90f52fee31b5d 100644 (file)
@@ -16,6 +16,7 @@ import com.google.common.base.Preconditions;
 import java.math.BigInteger;
 import java.util.Collections;
 import java.util.List;
+import javax.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.infra.Datastore.Configuration;
@@ -139,7 +140,7 @@ public abstract class L3vpnPopulator implements VpnPopulator {
     }
 
     public void addToLabelMapper(Long label, BigInteger dpnId, String prefix, List<String> nextHopIpList, Long vpnId,
-            String vpnInterfaceName, Long elanTag, boolean isSubnetRoute, String rd) {
+            @Nullable String vpnInterfaceName, @Nullable Long elanTag, boolean isSubnetRoute, String rd) {
         Preconditions.checkNotNull(label, "addToLabelMapper: label cannot be null or empty!");
         Preconditions.checkNotNull(prefix, "addToLabelMapper: prefix cannot be null or empty!");
         Preconditions.checkNotNull(vpnId, "addToLabelMapper: vpnId cannot be null or empty!");
@@ -197,9 +198,10 @@ public abstract class L3vpnPopulator implements VpnPopulator {
     }
 
     @SuppressWarnings("checkstyle:IllegalCatch")
-    protected void addPrefixToBGP(String rd, String primaryRd, String macAddress, String prefix, String nextHopIp,
-                                  VrfEntry.EncapType encapType, long label, long l3vni, String gatewayMac,
-                                  RouteOrigin origin, TypedWriteTransaction<Configuration> writeConfigTxn) {
+    protected void addPrefixToBGP(String rd, String primaryRd, @Nullable String macAddress, String prefix,
+                                  String nextHopIp, VrfEntry.EncapType encapType, long label, long l3vni,
+                                  String gatewayMac, RouteOrigin origin,
+                                  TypedWriteTransaction<Configuration> writeConfigTxn) {
         try {
             List<String> nextHopList = Collections.singletonList(nextHopIp);
             LOG.info("ADD: addPrefixToBGP: Adding Fib entry rd {} prefix {} nextHop {} label {} gwMac {}", rd, prefix,
index 2f8bd1b13c233c5b28c5309bb40c753f65d51968..9f99ca6034027b84e4df16a9712afeb493314fc7 100644 (file)
@@ -13,8 +13,10 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
+import javax.annotation.Nullable;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
@@ -60,17 +62,20 @@ public class ShowVpn extends OsgiCommandSupport {
     }
 
     @Override
+    @Nullable
     protected Object doExecute() {
         Map<String, Integer> vpnNameToConfigInterfaceMap = new HashMap<>();
         Map<String, Integer> vpnNameToOperInterfaceMap = new HashMap<>();
         if (detail == null) {
             showVpn();
-            Set<String> vpnInstances = new HashSet();
+            Set<String> vpnInstances = new HashSet<>();
             for (VpnInterface vpnInterface : vpnInterfaceConfigList) {
-                for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInterface.getVpnInstanceNames()) {
-                    String vpnName = vpnInterfaceVpnInstance.getVpnName();
-                    if (vpnName != null) {
-                        vpnInstances.add(vpnName);
+                if (vpnInterface.getVpnInstanceNames() != null) {
+                    for (VpnInstanceNames vpnInterfaceVpnInstance : vpnInterface.getVpnInstanceNames()) {
+                        String vpnName = vpnInterfaceVpnInstance.getVpnName();
+                        if (vpnName != null) {
+                            vpnInstances.add(vpnName);
+                        }
                     }
                 }
             }
@@ -132,7 +137,7 @@ public class ShowVpn extends OsgiCommandSupport {
             }
             session.getConsole().println("Present Oper VpnInterfaces are:");
             for (VpnInterfaceOpDataEntry vpnInterfaceOp : vpnInterfaceOpList) {
-                if (vpnInterfaceOp.getVpnInstanceName().equals(detail)) {
+                if (Objects.equals(vpnInterfaceOp.getVpnInstanceName(), detail)) {
                     session.getConsole().println(vpnInterfaceOp.getName());
                 }
             }
index de7f96a4d41be9c186429ba1539a51af15f47596..a075b2c76482ce6c6b186965bc96298384da371a 100644 (file)
@@ -13,6 +13,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
+import javax.annotation.Nullable;
 import org.apache.karaf.shell.commands.Command;
 import org.apache.karaf.shell.commands.Option;
 import org.apache.karaf.shell.console.OsgiCommandSupport;
@@ -46,6 +47,7 @@ public class ShowVpnInstanceOpData extends OsgiCommandSupport {
     }
 
     @Override
+    @Nullable
     protected Object doExecute() {
         if (detail == null) {
             getVpnInstanceOpData();