- ItmTepAddWorker tepAddWorker = new ItmTepAddWorker(tepsToRecover, null, dataBroker,
- imdsalApiManager, itmConfig, itmInternalTunnelAddWorker, itmExternalTunnelAddWorker,
- dpntePsInfoCache);
- LOG.trace("Re-creating transportzone {}", tzName);
- jobCoordinator.enqueueJob(tzName, tepAddWorker);
+ AtomicInteger eventCallbackCount = new AtomicInteger(0);
+ AtomicInteger eventRegistrationCount = new AtomicInteger(0);
+ if (interfaceManager.isItmDirectTunnelsEnabled()) {
+ Collection<DpnsTeps> dpnsTeps = dpnTepStateCache.getAllPresent();
+ for (DpnsTeps dpnTep : dpnsTeps) {
+ List<RemoteDpns> rmtdpns = dpnTep.getRemoteDpns();
+ for (RemoteDpns remoteDpn : rmtdpns) {
+ if (remoteDpn.getDestinationDpnId().equals(dpnTepsToRecover.getDPNID())
+ || dpnTep.getSourceDpnId().equals(dpnTepsToRecover.getDPNID())) {
+ eventRegistrationCount.incrementAndGet();
+ interfaceListToRecover.add(remoteDpn.getTunnelName());
+ }
+ }
+ }
+ LOG.trace("List of tunnels to be recovered : {}", interfaceListToRecover);
+ } else {
+ tunnelList.stream().filter(internalTunnel -> Objects.equals(internalTunnel
+ .getDestinationDPN(), dpnTepsToRecover.getDPNID()) || Objects.equals(
+ internalTunnel.getSourceDPN(), dpnTepsToRecover.getDPNID())).forEach(internalTunnel -> {
+ eventRegistrationCount.incrementAndGet();
+ interfaceListToRecover.add(String.valueOf(internalTunnel.getTunnelInterfaceNames()));
+ });
+ }
+
+ if (!interfaceListToRecover.isEmpty()) {
+ interfaceListToRecover.forEach(interfaceName -> {
+ StateTunnelListKey tlKey = new StateTunnelListKey(interfaceName);
+ LOG.trace("TunnelStateKey: {} for interface: {}", tlKey, interfaceName);
+ InstanceIdentifier<StateTunnelList> stListId = ItmUtils.buildStateTunnelListId(tlKey);
+ eventCallbacks.onRemove(LogicalDatastoreType.OPERATIONAL, stListId, (unused) -> {
+ LOG.trace("callback event for a delete {} interface instance....", stListId);
+ // recreating the transportZone
+ recreateTEP(tzName, tepsToRecover, eventCallbackCount, interfaceListToRecover.size());
+ return DataTreeEventCallbackRegistrar.NextAction.UNREGISTER;
+ }, Duration.ofMillis(5000), (id) -> {
+ LOG.trace("event callback timed out for {} tunnel interface ", interfaceName);
+ recreateTEP(tzName, tepsToRecover, eventCallbackCount, interfaceListToRecover.size());
+ });
+ });
+ } else {
+ recreateTEP(tzName, tepsToRecover, eventCallbackCount, interfaceListToRecover.size());
+ }