Handle exceptions in BgpRouteVrfEntryHandler 98/74898/3
authoreceghkl <manu.b@ericsson.com>
Wed, 18 Jul 2018 05:47:53 +0000 (11:17 +0530)
committerSam Hague <shague@redhat.com>
Wed, 22 Aug 2018 12:06:27 +0000 (12:06 +0000)
* Executor service is not handling any new task after the exception.
* Fix is added to handle the exception properly.
* Added more TRACE logs are added for data collection

Change-Id: I8496ec9d45cdf25288be5638a82610c7e2049f20
Signed-off-by: eceghkl <manu.b@ericsson.com>
fibmanager/impl/src/main/java/org/opendaylight/netvirt/fibmanager/BgpRouteVrfEntryHandler.java

index 57d636028c5b81309191d836d20ff6c7dff110e1..ca17b15b388a869dc251d17947b5823544737b26 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.netvirt.fibmanager;
 import static java.util.stream.Collectors.toList;
 
 import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
 import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -183,22 +182,27 @@ public class BgpRouteVrfEntryHandler extends BaseVrfEntryHandler
     private void createFibEntries(WriteTransaction writeTx, final InstanceIdentifier<VrfEntry> vrfEntryIid,
                                   final VrfEntry vrfEntry, List<SubTransaction> subTxns) {
         final VrfTablesKey vrfTableKey = vrfEntryIid.firstKeyOf(VrfTables.class);
-
+        LOG.trace("Creating fib entry for vrfEntry with destPrefix{}, rd {}",
+            vrfEntry.getDestPrefix(), vrfTableKey.getRouteDistinguisher());
         final VpnInstanceOpDataEntry vpnInstance =
                 getFibUtil().getVpnInstance(vrfTableKey.getRouteDistinguisher());
-        Preconditions.checkNotNull(vpnInstance, "Vpn Instance not available " + vrfTableKey.getRouteDistinguisher());
-        Preconditions.checkNotNull(vpnInstance.getVpnId(), "Vpn Instance with rd " + vpnInstance.getVrfId()
-                + " has null vpnId!");
-
+        if (vpnInstance == null || vpnInstance.getVpnId() == null) {
+            LOG.error("Vpn Instance not availabe {}", vrfTableKey.getRouteDistinguisher());
+            return;
+        }
         final Collection<VpnToDpnList> vpnToDpnList = vpnInstance.getVpnToDpnList();
         if (vpnToDpnList != null) {
             for (VpnToDpnList vpnDpn : vpnToDpnList) {
+                LOG.trace("Dpnstate is {} for dpn {} in vpn {}", vpnDpn.getDpnState(), vpnDpn.getDpnId(),
+                    vpnInstance.getVpnId());
                 if (vpnDpn.getDpnState() == VpnToDpnList.DpnState.Active) {
                     createRemoteFibEntry(vpnDpn.getDpnId(), vpnInstance.getVpnId(), vrfTableKey.getRouteDistinguisher(),
                             vrfEntry, writeTx, subTxns);
                 }
             }
         }
+        LOG.trace("Created fib entry for vrfEntry with destPrefix{}, rd {}",
+            vrfEntry.getDestPrefix(), vrfTableKey.getRouteDistinguisher());
     }
 
     /*
@@ -250,8 +254,12 @@ public class BgpRouteVrfEntryHandler extends BaseVrfEntryHandler
                                              String rd,
                                              List<NexthopManager.AdjacencyResult> adjacencyResults,
                                              List<SubTransaction> subTxns) {
-        Preconditions.checkArgument(vrfEntry.getRoutePaths().size() <= 2);
-
+        if (vrfEntry.getRoutePaths().size() > 2) {
+            LOG.error("DC-GW can advertise only 2 bestPaths for prefix {}", vrfEntry.getDestPrefix());
+            return;
+        }
+        LOG.trace("Start programming remote fib for destPrefix {}, vpnId {}, dpnId {}",
+            vrfEntry.getDestPrefix(), vpnId, remoteDpnId);
         if (adjacencyResults.size() == 1) {
             programRemoteFib(remoteDpnId, vpnId, vrfEntry, tx, rd, adjacencyResults, subTxns);
             return;
@@ -281,6 +289,8 @@ public class BgpRouteVrfEntryHandler extends BaseVrfEntryHandler
         actionInfos.add(new ActionGroup(index, groupId));
         instructions.add(new InstructionApplyActions(actionInfos));
         makeConnectedRoute(remoteDpnId, vpnId, vrfEntry, rd, instructions, NwConstants.ADD_FLOW, tx, subTxns);
+        LOG.trace("End programming remote fib for destPrefix {}, vpnId {}, dpnId {}",
+                vrfEntry.getDestPrefix(), vpnId, remoteDpnId);
     }
 
     public void createRemoteFibEntry(final BigInteger remoteDpnId,