Adding logs to elan interface add operation. 54/84154/3
authorAmitesh Soni <amitesh.soni@ericsson.com>
Tue, 3 Sep 2019 06:24:15 +0000 (11:54 +0530)
committerAmitesh Soni <amitesh.soni@ericsson.com>
Tue, 3 Sep 2019 07:34:35 +0000 (13:04 +0530)
Change-Id: I8f3080aa50d40a3ee818463ae662bfd8b04ff6dd
Signed-off-by: Amitesh Soni <amitesh.soni@ericsson.com>
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceManager.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceStateChangeListener.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/InterfaceAddWorkerOnElan.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/InterfaceAddWorkerOnElanInterface.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/utils/ElanUtils.java

index f3e2e969534d83ffb27be87eed01bbb7d35f9574..2b76fc1a2aaabde2c3102437bb65621c27c162fc 100644 (file)
@@ -551,6 +551,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         // updating the static-Mac Entries for the existing elanInterface
         String elanName = update.getElanInstanceName();
         String interfaceName = update.getName();
+        LOG.info("Update static mac entries for elan interface {} in elan instance {}", interfaceName, elanName);
 
         List<StaticMacEntries> originalStaticMacEntries = original.getStaticMacEntries();
         List<StaticMacEntries> updatedStaticMacEntries = update.getStaticMacEntries();
@@ -569,10 +570,14 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 txRunner.callWithNewReadWriteTransactionAndSubmit(OPERATIONAL, tx -> {
                     Optional<MacEntry> existingMacEntry = tx.read(macEntryIdentifier).get();
                     if (existingMacEntry.isPresent()) {
+                        LOG.debug("updating elan interface forwarding table for mac entry {} elan instance {}",
+                                existingMacEntry.get(), elanName);
                         elanForwardingEntriesHandler.updateElanInterfaceForwardingTablesList(
                             elanName, interfaceName, existingMacEntry.get().getInterface(), existingMacEntry.get(),
                             tx);
                     } else {
+                        LOG.info("Adding elan interface forwarding table for mac entry {} elan interface"
+                                + " {} elan instance {}.", staticMacEntry.getMacAddress(), interfaceName, elanName);
                         elanForwardingEntriesHandler.addElanInterfaceForwardingTableList(
                             elanName, interfaceName, staticMacEntry, tx);
                     }
@@ -582,6 +587,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
     @Override
     protected void add(InstanceIdentifier<ElanInterface> identifier, ElanInterface elanInterfaceAdded) {
+        LOG.info("Init for ELAN interface Add {}", elanInterfaceAdded);
         addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, operTx -> {
             String elanInstanceName = elanInterfaceAdded.getElanInstanceName();
             String interfaceName = elanInterfaceAdded.getName();
@@ -624,6 +630,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     }
 
     List<ListenableFuture<Void>> handleunprocessedElanInterfaces(ElanInstance elanInstance) {
+        LOG.trace("Handling unprocessed elan interfaces for elan instance {}", elanInstance.getElanInstanceName());
         List<ListenableFuture<Void>> futures = new ArrayList<>();
         Queue<ElanInterface> elanInterfaces = unProcessedElanInterfaces.get(elanInstance.getElanInstanceName());
         if (elanInterfaces == null || elanInterfaces.isEmpty()) {
@@ -635,6 +642,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             futures.addAll(addElanInterface(elanInterface, interfaceInfo, elanInstance));
         }
         unProcessedElanInterfaces.remove(elanInstance.getElanInstanceName());
+        LOG.info("Unprocessed elan interfaces for elan instance {} has been removed.",
+                elanInstance.getElanInstanceName());
         return futures;
     }
 
@@ -691,12 +700,14 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
 
         String interfaceName = elanInterface.getName();
         String elanInstanceName = elanInterface.getElanInstanceName();
+        LOG.trace("Adding elan interface: interface name {} , instance name {}", interfaceName, elanInstanceName);
 
         List<ListenableFuture<Void>> futures = new ArrayList<>();
         AddElanInterfaceHolder holder = new AddElanInterfaceHolder();
         futures.add(txRunner.callWithNewReadWriteTransactionAndSubmit(OPERATIONAL, operTx -> {
             Elan elanInfo = ElanUtils.getElanByName(broker, elanInstanceName);
             if (elanInfo == null) {
+                LOG.trace("elanInfo is null for elan instance: {}", elanInstanceName);
                 List<String> elanInterfaces = new ArrayList<>();
                 elanInterfaces.add(interfaceName);
                 futures.add(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
@@ -737,6 +748,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                             holder.dpnInterfaces = updateElanDpnInterfacesList(elanInstanceName, holder.dpId,
                                 elanInterfaces, operTx);
                         }
+                        LOG.debug("1st interface {} for elan {} is added to dpn {}",
+                                interfaceName, elanInstanceName, holder.dpId);
                         // The 1st ElanInterface in a DPN must program the Ext Tunnel
                         // table, but only if Elan has VNI
                         if (isVxlanNetworkOrVxlanSegment(elanInstance)) {
@@ -756,6 +769,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                         }
                         holder.dpnInterfaces =
                             updateElanDpnInterfacesList(elanInstanceName, holder.dpId, elanInterfaces, operTx);
+                        LOG.debug("Interface {} for elan {} is added to dpn {}",
+                                interfaceName, elanInstanceName, holder.dpId);
                     }
                 } finally {
                     lock.unlock();
@@ -921,6 +936,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     private void installEntriesForElanInterface(ElanInstance elanInstance, ElanInterface elanInterface,
             InterfaceInfo interfaceInfo, boolean isFirstInterfaceInDpn, TypedWriteTransaction<Configuration> confTx) {
         if (!isOperational(interfaceInfo)) {
+            LOG.warn("Interface {} is not operational", elanInterface.getName());
             return;
         }
         BigInteger dpId = interfaceInfo.getDpId();
@@ -955,9 +971,13 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
     private void installEntriesForFirstInterfaceonDpn(ElanInstance elanInfo, InterfaceInfo interfaceInfo,
             DpnInterfaces dpnInterfaces, boolean isFirstInterfaceInDpn, TypedWriteTransaction<Configuration> confTx) {
         if (!isOperational(interfaceInfo)) {
+            LOG.warn("Entries for interface on dpn {} not installed since interface {} is not operational",
+                    dpnInterfaces.getDpId(), interfaceInfo.getInterfaceName());
             return;
         }
         // LocalBroadcast Group creation with elan-Interfaces
+        LOG.info("Installing entries for interface {} on dpn {}", interfaceInfo.getInterfaceName(),
+                dpnInterfaces.getDpId());
         setupLocalBroadcastGroups(elanInfo, dpnInterfaces, interfaceInfo, confTx);
         if (isFirstInterfaceInDpn) {
             LOG.trace("waitTimeForSyncInstall is {}", WAIT_TIME_FOR_SYNC_INSTALL);
@@ -987,6 +1007,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 elanUtils.getInstructionsInPortForOutGroup(interfaceInfo.getInterfaceName()));
 
         mdsalManager.addFlow(writeFlowGroupTx, interfaceInfo.getDpId(), flow);
+        LOG.trace("Filter equals table(55) flow entry created on dpn: {} for interface port: {}",
+                interfaceInfo.getDpId(), interfaceInfo.getPortName());
 
         Flow flowEntry = MDSALUtil.buildFlowNew(NwConstants.ELAN_FILTER_EQUALS_TABLE,
                 getFlowRef(NwConstants.ELAN_FILTER_EQUALS_TABLE, ifTag, "drop"), 10, elanInfo.getElanInstanceName(), 0,
@@ -994,6 +1016,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 getMatchesForFilterEqualsLPortTag(ifTag), MDSALUtil.buildInstructionsDrop());
 
         mdsalManager.addFlow(writeFlowGroupTx, interfaceInfo.getDpId(), flowEntry);
+        LOG.trace("Filter equals table(55) drop flow entry created on dpn: {} for interface port: {}",
+                interfaceInfo.getDpId(), interfaceInfo.getPortName());
     }
 
     public void removeFilterEqualsTable(ElanInstance elanInfo, InterfaceInfo interfaceInfo,
@@ -1335,6 +1359,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 elanTag), 0, 0, ITMConstants.COOKIE_ITM.add(BigInteger.valueOf(elanTag)), listMatchInfoBase,
                 instructionInfos);
         mdsalManager.addFlow(writeFlowGroupTx, flowEntity);
+        LOG.info("Installed internal tunnel table (36) flow entry on dpn: {} for elan: {}, tag: {}", dpId,
+                elanInfo.getElanInstanceName(), elanTag);
     }
 
     private void setupEtreeTerminateServiceTable(ElanInstance elanInfo, BigInteger dpId,
@@ -1373,6 +1399,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 getInstructionsForOutGroup(ElanUtils.getElanRemoteBCGId(elanTag)));
 
         mdsalManager.addFlow(writeFlowGroupTx, flowEntity);
+        LOG.trace("Installed unknown dmac table (53) flow entry on dpn: {} for elan: {}, tag: {}",
+                dpId, elanInfo.getElanInstanceName(), elanTag);
     }
 
     private void installRemoteUnknownFlow(ElanInstance elanInfo, BigInteger dpId, long elanTag,
@@ -1387,6 +1415,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                     getMatchesForElanTag(elanTag, /* SH flag */true),
                     getInstructionsForOutGroup(ElanUtils.getElanLocalBCGId(elanTag)));
             mdsalManager.addFlow(writeFlowGroupTx, flowEntity);
+            LOG.trace("Installed unknown dmac table (53) flow entry on dpn: {} for elan connected to "
+                    + "external network: {}, tag: {}", dpId, elanInfo.getElanInstanceName(), elanTag);
         }
     }
 
@@ -1446,6 +1476,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 bindServiceId);
         if (!existingElanService.isPresent()) {
             tx.put(bindServiceId, serviceInfo, CREATE_MISSING_PARENTS);
+            LOG.trace("Done binding elan service for elan: {} for interface: {}", elanInstanceName, interfaceName);
         }
     }
 
@@ -1508,6 +1539,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 .withKey(new DpnInterfacesKey(dpId)).build();
         tx.put(ElanUtils.getElanDpnInterfaceOperationalDataPath(elanInstanceName, dpId), dpnInterface,
                 CREATE_MISSING_PARENTS);
+        LOG.trace("Updated operational dpn interfaces for elan: {} with interfaces: {}", elanInstanceName,
+                interfaceNames);
         return dpnInterface;
     }
 
@@ -1537,6 +1570,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                 .withKey(new DpnInterfacesKey(dpId)).build();
         tx.put(ElanUtils.getElanDpnInterfaceOperationalDataPath(elanInstanceName, dpId), dpnInterface,
                 CREATE_MISSING_PARENTS);
+        LOG.trace("Created operational dpn interfaces for elan: {} with interfaces: {}", elanInstanceName,
+                interfaceNames);
         return dpnInterface;
     }
 
@@ -1552,6 +1587,7 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
                     .withKey(new ElanInterfaceMacKey(interfaceName)).build();
             tx.put(ElanUtils.getElanInterfaceMacEntriesOperationalDataPath(interfaceName), elanInterfaceMacTable,
                     CREATE_MISSING_PARENTS);
+            LOG.trace("Created interface MAC table for interface: {}", interfaceName);
         }
     }
 
@@ -1570,6 +1606,8 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
             Elan elanState = new ElanBuilder().setName(elanInstanceName).setElanInterfaces(interfaceLists)
                     .withKey(new ElanKey(elanInstanceName)).build();
             tx.put(ElanUtils.getElanInstanceOperationalDataPath(elanInstanceName), elanState, CREATE_MISSING_PARENTS);
+            LOG.trace("Updated operational elan state for elan: {} with interfaces: {}", elanInstanceName,
+                    interfaceLists);
         }
     }
 
index 632762ec2b9d39780ff407e9a44acf7ccf3fe324..fbd903e48d143a2ed0485c9191a9ad2599b21dfc 100644 (file)
@@ -104,6 +104,7 @@ public class ElanInterfaceStateChangeListener
         String interfaceName =  intrf.getName();
         Optional<ElanInterface> elanInterface = elanInterfaceCache.get(interfaceName);
         if (!elanInterface.isPresent()) {
+            LOG.warn("Elan interface {} is not present.", interfaceName);
             return;
         }
         InstanceIdentifier<ElanInterface> elanInterfaceId = ElanUtils
index 999887b2b82ae72a296d5cee32bcda6a5ad53e4a..0f6ee87b47fa3944884d2241e4429245f9ef95ae 100644 (file)
@@ -46,6 +46,8 @@ public class InterfaceAddWorkerOnElan implements Callable<List<ListenableFuture<
     @Override
     @SuppressWarnings("checkstyle:IllegalCatch")
     public List<ListenableFuture<Void>> call() {
+        LOG.info("InterfaceAddWorkerOnElan: Handling elan interface add for elan interface: {} and elan instance: {} ",
+                elanInterface.getName(), elanInstance.getElanInstanceName());
         try {
             return dataChangeListener.addElanInterface(elanInterface, interfaceInfo, elanInstance);
         } catch (RuntimeException e) {
index 68f8c11a6ba3cbe500249a346827dcd8eec12f7e..541d1042605bd3ea27a32693eaf4cc1684222d19 100644 (file)
@@ -11,6 +11,7 @@ import com.google.common.util.concurrent.ListenableFuture;
 import java.util.List;
 import java.util.concurrent.Callable;
 import org.opendaylight.genius.interfacemanager.globals.InterfaceInfo;
+import org.opendaylight.netvirt.elan.utils.ElanUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.instances.ElanInstance;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.ElanInterface;
 import org.slf4j.Logger;
@@ -44,11 +45,17 @@ public class InterfaceAddWorkerOnElanInterface implements Callable<List<Listenab
 
 
     @Override
+    @SuppressWarnings("checkstyle:IllegalCatch")
     public List<ListenableFuture<Void>> call() {
-        LOG.info("Handling elan interface {} add for elan {} ", elanInterface.getName(),
-                elanInstance.getElanInstanceName());
-        return dataChangeListener.setupEntriesForElanInterface(elanInstance, elanInterface, interfaceInfo,
-                isFirstInterfaceInDpn);
+        LOG.info("InterfaceAddWorkerOnElanInterface: Handling elan interface {} add for elan {} ",
+                elanInterface.getName(), elanInstance.getElanInstanceName());
+        try {
+            return dataChangeListener.setupEntriesForElanInterface(elanInstance, elanInterface, interfaceInfo,
+                    isFirstInterfaceInDpn);
+        } catch (RuntimeException e) {
+            LOG.error("Error while processing key {} for elan interface {} ", key, elanInterface, e);
+            return ElanUtils.returnFailedListenableFutureIfTransactionCommitFailedExceptionCauseOrElseThrow(e);
+        }
     }
 
 }
index a25c8a25eed3c7b10a2475eca48ccbe96fbee4e6..6b24edebcde5cfbd3c73b7fb280f04130c7c83f6 100755 (executable)
@@ -1169,6 +1169,8 @@ public class ElanUtils {
             elanInstanceBuilder.addAugmentation(EtreeInstance.class, etreeInstance);
         }
         ElanInstance elanInstanceWithTag = elanInstanceBuilder.build();
+        LOG.trace("Updated elan Operational DS for elan: {} with elanTag: {} and interfaces: {}", elanInstanceName,
+                elanTag, elanInterfaces);
         confTx.merge(ElanHelper.getElanInstanceConfigurationDataPath(elanInstanceName), elanInstanceWithTag,
             CREATE_MISSING_PARENTS);
         return elanInstanceWithTag;