From 0e71d9d70525c1f77a945aceb538654943a400fe Mon Sep 17 00:00:00 2001 From: Apurba Mukherjee Date: Wed, 29 Jul 2020 17:19:47 +0530 Subject: [PATCH] Fix: ITM tunnels going to Unknown state after compute reboot hosting vcic There was a code bug in comparison of tunnel's oper status once entity ownership changes. This is fixed now. Change-Id: I15bad2204c24e65ac5ed987c272bc19bb2273e5d Signed-off-by: Apurba Mukherjee --- .../recovery/impl/EosChangeEventHandler.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/EosChangeEventHandler.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/EosChangeEventHandler.java index 3b727c433..94f5c0cf2 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/EosChangeEventHandler.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/recovery/impl/EosChangeEventHandler.java @@ -28,6 +28,7 @@ import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunner; import org.opendaylight.mdsal.binding.util.ManagedNewTransactionRunnerImpl; import org.opendaylight.mdsal.binding.util.TypedWriteTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TepTypeInternal; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelOperStatus; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelListBuilder; @@ -68,13 +69,15 @@ public class EosChangeEventHandler { LOG.debug("EosChangeListener: recovering unknown tunnels"); if (!directTunnelUtils.isEntityOwner()) { - LOG.debug("Not an entity owner, returning..."); + LOG.debug("EosChangeListener: Not an entity owner, returning..."); return; } List unknownTunnels = getUnknownTunnelsFromDefaultOper(); if (unknownTunnels.isEmpty()) { - LOG.debug("Empty oper DS or No unknown tunnels in ITM oper DS"); + LOG.debug("EosChangeListener: No unknown tunnels in ITM oper DS"); + EVENT_LOGGER.debug("EosChangeListener: No unknown tunnels in oper DS."); } else { + EVENT_LOGGER.debug("EosChangeListener: Number of unknown tunnels in oper DS:{}",unknownTunnels.size()); ConcurrentMap tunnelNameToNodeConnectorIdValue = prepareKeyForInventoryOper(unknownTunnels); Set> entrySet = tunnelNameToNodeConnectorIdValue.entrySet(); ReadTransaction readOnlyTx = dataBroker.newReadOnlyTransaction(); @@ -87,9 +90,11 @@ public class EosChangeEventHandler { InstanceIdentifier ncIdentifier = InstanceIdentifier.builder(Nodes.class) .child(Node.class, new NodeKey(nodeId)) .child(NodeConnector.class, new NodeConnectorKey(nodeConnectorId)).build(); - + LOG.debug("EosChangeListener: NodeConnectorII with nodeId:{} and nodeConnectorId:{}", + nodeIdValue, nodeConnectorIdValue); try { if (readOnlyTx.exists(LogicalDatastoreType.OPERATIONAL, ncIdentifier).get()) { + LOG.debug("EosChangeListener: Update tunnel state for {}",tunnelName); txRunner.callWithNewWriteOnlyTransactionAndSubmit(OPERATIONAL, tx -> { updateTunnelState(tunnelName, tx); }); @@ -112,13 +117,12 @@ public class EosChangeEventHandler { Collection tunnelList = tunnelStateCache.getAllPresent(); if (!tunnelList.isEmpty()) { for (StateTunnelList stateTunnelEntry : tunnelList) { - if (stateTunnelEntry.getOperState().equals(TunnelOperStatus.Unknown)) { + if (stateTunnelEntry.getDstInfo() != null + && TepTypeInternal.class.equals(stateTunnelEntry.getDstInfo().getTepDeviceType()) + && stateTunnelEntry.getOperState().equals(TunnelOperStatus.Unknown)) { unknownTunnels.add(stateTunnelEntry); } } - } else { - LOG.debug("ITM oper DS is empty."); - EVENT_LOGGER.debug("ITM-EosChange, oper DS is empty."); } return unknownTunnels; } -- 2.36.6