From 248f2e3e7d2a05ee7240bf23e36403d03d267419 Mon Sep 17 00:00:00 2001 From: Karthikeyan Krishnan Date: Mon, 22 Jul 2019 12:25:06 +0530 Subject: [PATCH] BGPVPN delete is throwing NPE Issue Description: ================= BGPVPN not getting Deleted and remaining stale due to the exception[0] from CSC [0]

Caused by:

java.lang.NullPointerException
at
org.opendaylight.netvirt.neutronvpn.NeutronvpnManager.removeVpn(NeutronvpnManager.java:2191)
at
org.opendaylight.netvirt.neutronvpn.NeutronvpnManager.deleteL3VPN(NeutronvpnManager.java:1443)

Solution:
=========
If BGPVPN instance has already disassociated from
Network(s), later user is trying to delete the BGPVPN
instance using REST API call, we should handle
proper null check to avoid the exceptions from
NeutronVpnManager. Since vpnmaps querying is causing
this Nullpointer Exception

Change-Id: I17037a52862cf851985931eff94a88bcfc951476
Signed-off-by: Karthikeyan Krishnan 
---
 .../netvirt/neutronvpn/NeutronvpnManager.java | 26 +++++++++++--------
 1 file changed, 15 insertions(+), 11 deletions(-)

diff --git a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java
index b889403318..ac22067ff1 100644
--- a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java
+++ b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java
@@ -2333,18 +2333,22 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
     public void removeVpn(Uuid vpnId) {
         // read VPNMaps
         VpnMap vpnMap = neutronvpnUtils.getVpnMap(vpnId);
-        List routerIdsList = vpnMap != null ? vpnMap.getRouterIds() : null;
-        List routerUuidList = new ArrayList<>();
-        // dissociate router
-        if (routerIdsList != null && !routerIdsList.isEmpty()) {
-            for (RouterIds router : routerIdsList) {
-                Uuid routerId = router.getRouterId();
-                routerUuidList.add(routerId);
-                dissociateRouterFromVpn(vpnId, routerId);
+        if (vpnMap != null) {
+            List routerIdsList = vpnMap.getRouterIds();
+            List routerUuidList = new ArrayList<>();
+            // dissociate router
+            if (routerIdsList != null && !routerIdsList.isEmpty()) {
+                for (RouterIds router : routerIdsList) {
+                    Uuid routerId = router.getRouterId();
+                    routerUuidList.add(routerId);
+                    dissociateRouterFromVpn(vpnId, routerId);
+                }
             }
-        }
-        if (!routerUuidList.contains(vpnId) && vpnMap.getNetworkIds() != null) {
-            dissociateNetworksFromVpn(vpnId, vpnMap.getNetworkIds());
+            if (!routerUuidList.contains(vpnId) && vpnMap.getNetworkIds() != null) {
+                dissociateNetworksFromVpn(vpnId, vpnMap.getNetworkIds());
+            }
+        } else {
+            LOG.error("removeVpn: vpnMap is null for vpn {}", vpnId.getValue());
         }
         // remove entire vpnMaps node
         deleteVpnMapsNode(vpnId);
-- 
2.36.6