From: Robert Varga Date: Fri, 8 Nov 2019 11:42:52 +0000 (+0100) Subject: Fix another VpnSubnetRouteHandler NPE source X-Git-Tag: release/magnesium~70 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=f804bab50273986a64bae74fcfa4134f1f109835;p=netvirt.git Fix another VpnSubnetRouteHandler NPE source java.lang.NullPointerException: null at org.opendaylight.netvirt.vpnmanager.VpnSubnetRouteHandler.electNewDpnForSubnetRoute(VpnSubnetRouteHandler.java:988) ~[?:?] at org.opendaylight.netvirt.vpnmanager.VpnSubnetRouteHandler.onInterfaceDown(VpnSubnetRouteHandler.java:693) ~[?:?] at org.opendaylight.netvirt.vpnmanager.SubnetRouteInterfaceStateChangeListener.lambda$remove$1(SubnetRouteInterfaceStateChangeListener.java:184) ~[?:?] at org.opendaylight.infrautils.utils.ClassLoaders.lambda$call$2(ClassLoaders.java:39) ~[293:org.opendaylight.infrautils.util:1.6.1] at org.opendaylight.infrautils.utils.ClassLoaders.call(ClassLoaders.java:47) ~[293:org.opendaylight.infrautils.util:1.6.1] at org.opendaylight.infrautils.utils.ClassLoaders.call(ClassLoaders.java:39) ~[293:org.opendaylight.infrautils.util:1.6.1] at org.opendaylight.infrautils.jobcoordinator.internal.JobCoordinatorImpl$MainTask.runWithUncheckedExceptionLogging(JobCoordinatorImpl.java:398) ~[?:?] at org.opendaylight.infrautils.utils.concurrent.LoggingUncaughtThreadDeathContextRunnable.run(LoggingUncaughtThreadDeathContextRunnable.java:60) ~[293:org.opendaylight.infrautils.util:1.6.1] at org.opendaylight.infrautils.utils.ClassLoaders.lambda$run$0(ClassLoaders.java:26) ~[293:org.opendaylight.infrautils.util:1.6.1] at org.opendaylight.infrautils.utils.ClassLoaders.call(ClassLoaders.java:47) ~[293:org.opendaylight.infrautils.util:1.6.1] at org.opendaylight.infrautils.utils.ClassLoaders.run(ClassLoaders.java:25) ~[293:org.opendaylight.infrautils.util:1.6.1] at org.opendaylight.infrautils.utils.ClassLoaders.lambda$wrap$3(ClassLoaders.java:54) ~[293:org.opendaylight.infrautils.util:1.6.1] at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1402) [?:?] at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) [?:?] at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) [?:?] at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) [?:?] at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) [?:?] This indicates that we do not need to have entries on a downed interface, thus fixing it up. JIRA: NETVIRT-1636 Change-Id: I181a6b5f9f2618ff5be1bc254e5873f45f6f6768 Signed-off-by: Robert Varga (cherry picked from commit 6d7370b369d15affb039fc09664283817675966d) --- diff --git a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnSubnetRouteHandler.java b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnSubnetRouteHandler.java index e0e6952442..a0eeedbbd5 100644 --- a/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnSubnetRouteHandler.java +++ b/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnSubnetRouteHandler.java @@ -944,11 +944,7 @@ public class VpnSubnetRouteHandler { @SuppressWarnings("checkstyle:IllegalCatch") private void electNewDpnForSubnetRoute(SubnetOpDataEntryBuilder subOpBuilder, @Nullable Uint64 oldDpnId, Uuid subnetId, Uuid networkId, boolean isBgpVpn) { - List subDpnList = null; boolean isRouteAdvertised = false; - subDpnList = new ArrayList<>(); - subDpnList = subOpBuilder.getSubnetToDpn() != null ? new ArrayList<>(subOpBuilder.getSubnetToDpn()) - : subDpnList; String rd = subOpBuilder.getVrfId(); String subnetIp = subOpBuilder.getSubnetCidr(); String vpnName = subOpBuilder.getVpnName(); @@ -986,24 +982,27 @@ public class VpnSubnetRouteHandler { String nhTepIp = null; Uint64 nhDpnId = null; - for (SubnetToDpn subnetToDpn : subDpnList) { - if (subnetToDpn.getDpnId().equals(oldDpnId)) { - // Is this same is as input dpnId, then ignore it - continue; - } - nhDpnId = subnetToDpn.getDpnId(); - if (vpnNodeListener.isConnectedNode(nhDpnId)) { - // selected dpnId is connected to ODL - // but does it have a TEP configured at all? - try { - nhTepIp = InterfaceUtils.getEndpointIpAddressForDPN(dataBroker, nhDpnId); - if (nhTepIp != null) { - isAlternateDpnSelected = true; - break; + List subDpnList = subOpBuilder.getSubnetToDpn(); + if (subDpnList != null) { + for (SubnetToDpn subnetToDpn : subDpnList) { + if (subnetToDpn.getDpnId().equals(oldDpnId)) { + // Is this same is as input dpnId, then ignore it + continue; + } + nhDpnId = subnetToDpn.getDpnId(); + if (vpnNodeListener.isConnectedNode(nhDpnId)) { + // selected dpnId is connected to ODL + // but does it have a TEP configured at all? + try { + nhTepIp = InterfaceUtils.getEndpointIpAddressForDPN(dataBroker, nhDpnId); + if (nhTepIp != null) { + isAlternateDpnSelected = true; + break; + } + } catch (Exception e) { + LOG.warn("{} electNewDpnForSubnetRoute: Unable to find TepIp for rd {} subnetroute subnetip {}" + + " for dpnid {}, attempt next", LOGGING_PREFIX, rd, subnetIp, nhDpnId.toString(), e); } - } catch (Exception e) { - LOG.warn("{} electNewDpnForSubnetRoute: Unable to find TepIp for rd {} subnetroute subnetip {}" - + " for dpnid {}, attempt next", LOGGING_PREFIX, rd, subnetIp, nhDpnId.toString(), e); } } }