Handle Node Repair in IFM 29/82729/6
authorNobin Mathew <nobin.mathew@ericsson.com>
Wed, 17 Apr 2019 10:03:35 +0000 (15:33 +0530)
committerFaseela K <faseela.k@ericsson.com>
Fri, 2 Aug 2019 05:37:15 +0000 (05:37 +0000)
Handle Node Repair in IFM, check for UNKNOWN state.

Change-Id: I48a0e66d396b9072e897f96a71108fc1d4ea8fc6
Signed-off-by: Nobin Mathew <nobin.mathew@ericsson.com>
interfacemanager/interfacemanager-impl/src/main/java/org/opendaylight/genius/interfacemanager/listeners/InterfaceInventoryStateListener.java

index 551aeea17ce04ad11fdfe0b99902a08719664bf3..660d394a0fdb7c66ee70d918801b0156b9903182 100644 (file)
@@ -49,6 +49,7 @@ import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
 import org.opendaylight.infrautils.utils.function.InterruptibleCheckedConsumer;
 import org.opendaylight.serviceutils.srm.RecoverableListener;
 import org.opendaylight.serviceutils.srm.ServiceRecoveryRegistry;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.port.rev130925.PortReason;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
@@ -232,13 +233,21 @@ public class InterfaceInventoryStateListener
             fcNodeConnectorNew.getName());
 
         if (InterfaceManagerCommonUtils.isNovaPort(portName) || InterfaceManagerCommonUtils.isK8SPort(portName)) {
-            NodeConnectorId nodeConnectorIdOld =
-                    FlowBasedServicesUtils.getNodeConnectorIdFromInterface(portName, interfaceManagerCommonUtils);
+            NodeConnectorId nodeConnectorIdOld = null;
+            org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang
+                    .ietf.interfaces.rev140508.interfaces.state.Interface interfaceState = interfaceManagerCommonUtils
+                    .getInterfaceState(interfaceName);
+            if (interfaceState != null) {
+                List<String> ofportIds = interfaceState.getLowerLayerIf();
+                nodeConnectorIdOld = new NodeConnectorId(ofportIds.get(0));
+            }
             if (nodeConnectorIdOld != null && !nodeConnectorId.equals(nodeConnectorIdOld)) {
                 BigInteger dpnIdOld = IfmUtil.getDpnFromNodeConnectorId(nodeConnectorIdOld);
                 BigInteger dpnIdNew = IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId);
                 if (!Objects.equals(dpnIdOld, dpnIdNew)) {
-                    if (fcNodeConnectorNew.getReason() != PortReason.Add) {
+                    if ((fcNodeConnectorNew.getReason() != PortReason.Add)
+                            && (interfaceState.getOperStatus()
+                            != Interface.OperStatus.Unknown)) {
                         LOG.error("Dropping Port update event for {}, as DPN id is changed from {} to {}",
                             fcNodeConnectorNew.getName(), dpnIdOld, dpnIdNew);
                         return;