- List<ListenableFuture<Void>> futures = new ArrayList<ListenableFuture<Void>>();
-
- if (InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(terminationPointNew.getName(), dataBroker) == null) {
- return futures;
- }
- // update opstate of interface if TEP has gone down/up as a result of BFD monitoring
- LOG.debug("updating tunnel state for interface {}", terminationPointNew.getName());
- WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
- InterfaceManagerCommonUtils.updateOpState(transaction, terminationPointNew.getName(), getTunnelOpState(terminationPointNew.getInterfaceBfdStatus()));
- futures.add(transaction.submit());
- return futures;
+ final Interface.OperStatus interfaceBfdStatus = getTunnelOpState(terminationPointNew.getInterfaceBfdStatus());
+ final String interfaceName = terminationPointNew.getName();
+ InterfaceManagerCommonUtils.addBfdStateToCache(interfaceName, interfaceBfdStatus);
+ IfmClusterUtils.runOnlyInLeaderNode(() -> {
+ DataStoreJobCoordinator jobCoordinator = DataStoreJobCoordinator.getInstance();
+ jobCoordinator.enqueueJob(interfaceName, () -> {
+ // update opstate of interface if TEP has gone down/up as a result of BFD monitoring
+ final List<ListenableFuture<Void>> futures = new ArrayList<>();
+ final Interface interfaceState = InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(
+ terminationPointNew.getName(), dataBroker);
+ if (interfaceState != null && interfaceState.getOperStatus() != Interface.OperStatus.Unknown &&
+ interfaceState.getOperStatus() != interfaceBfdStatus) {
+ LOG.debug("updating tunnel state for interface {}", interfaceName);
+ WriteTransaction transaction = dataBroker.newWriteOnlyTransaction();
+ InterfaceManagerCommonUtils.updateOpState(transaction, interfaceName,
+ interfaceBfdStatus);
+ futures.add(transaction.submit());
+ }
+ return futures;
+ });
+ }, IfmClusterUtils.INTERFACE_CONFIG_ENTITY);
+ return null;