Bug 8614: NPE observed in cloud-sc's VrfListener 52/58352/4
authorMiguel Perez <francisco.miguel.perez@ericsson.com>
Tue, 6 Jun 2017 15:14:47 +0000 (17:14 +0200)
committerSam Hague <shague@redhat.com>
Wed, 7 Jun 2017 17:33:03 +0000 (17:33 +0000)
Change-Id: Ief4b9b90c96e1e426b9399389538cd14b39fc942
Signed-off-by: Miguel Perez <francisco.miguel.perez@ericsson.com>
vpnservice/cloud-servicechain/cloud-servicechain-impl/src/main/java/org/opendaylight/netvirt/cloudservicechain/listeners/VrfListener.java

index 1896c337503bb5a4af64026ec6d0a297a13ad32e..8f8a21dad2dfb706eec5fa2fd0617eedb049bd74 100644 (file)
@@ -107,11 +107,22 @@ public class VrfListener extends AsyncDataTreeChangeListenerBase<VrfEntry, VrfLi
 
         Optional<VpnInstanceOpDataEntry> vpnOpData = VpnServiceChainUtils.getVpnInstanceOpData(broker, vpnRd);
         if (! vpnOpData.isPresent()) {
-            LOG.warn("Could not find operational data for VPN with RD={}", vpnRd);
+            if (addOrRemove == NwConstants.ADD_FLOW) {
+                LOG.error("VrfEntry added: Could not find operational data for VPN with RD={}", vpnRd);
+            } else {
+                LOG.warn("VrfEntry removed: No Operational data found for VPN with RD={}. No further action", vpnRd);
+            }
+
             return;
         }
 
         Collection<VpnToDpnList> vpnToDpnList = vpnOpData.get().getVpnToDpnList();
+        if (vpnToDpnList == null || vpnToDpnList.isEmpty()) {
+            LOG.warn("Empty VpnToDpnlist found in Operational for VPN with RD={}. No label will be {}",
+                     vpnRd, addOrRemove == NwConstants.ADD_FLOW ? "programmed" : "cleaned");
+            return;
+        }
+
         for (VpnToDpnList dpnInVpn : vpnToDpnList) {
             BigInteger dpnId = dpnInVpn.getDpnId();
             VpnServiceChainUtils.programLFibEntriesForSCF(mdsalMgr, dpnId, Collections.singletonList(vrfEntry),