From 815ab49f48693bff651bda719f6c6d3c7bef8add Mon Sep 17 00:00:00 2001 From: Nobin Mathew Date: Mon, 16 Apr 2018 15:07:41 +0530 Subject: [PATCH] AlivenessMonitor pause/stop should work in cluster JIRA: GENIUS-126 Change-Id: I464c3d6bdd67ebda2c47cdbb22d69e9b254b28c6 Signed-off-by: Nobin Mathew (cherry picked from commit 95e03d7) --- .../internal/AlivenessMonitor.java | 45 ++++++++++++++++++- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java index 75e256d83..e2fb584fe 100644 --- a/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java +++ b/alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java @@ -53,6 +53,7 @@ import org.opendaylight.genius.alivenessmonitor.protocols.AlivenessProtocolHandl import org.opendaylight.genius.infra.ManagedNewTransactionRunner; import org.opendaylight.genius.infra.ManagedNewTransactionRunnerImpl; import org.opendaylight.genius.mdsalutil.packet.Ethernet; +import org.opendaylight.genius.tools.mdsal.listener.AbstractClusteredAsyncDataTreeChangeListener; import org.opendaylight.infrautils.utils.concurrent.ThreadFactoryProvider; import org.opendaylight.openflowplugin.libraries.liblldp.NetUtils; import org.opendaylight.openflowplugin.libraries.liblldp.Packet; @@ -77,6 +78,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorStopInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitorUnpauseInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitoringMode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411.MonitoringStates; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411._interface.monitor.map.InterfaceMonitorEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411._interface.monitor.map.InterfaceMonitorEntryBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.alivenessmonitor.rev160411._interface.monitor.map.InterfaceMonitorEntryKey; @@ -117,7 +119,8 @@ import org.slf4j.LoggerFactory; @Singleton public class AlivenessMonitor - implements AlivenessMonitorService, PacketProcessingListener, InterfaceStateListener, AutoCloseable { + extends AbstractClusteredAsyncDataTreeChangeListener + implements AlivenessMonitorService, PacketProcessingListener, InterfaceStateListener { private static final Logger LOG = LoggerFactory.getLogger(AlivenessMonitor.class); @@ -175,6 +178,10 @@ public class AlivenessMonitor public AlivenessMonitor(final DataBroker dataBroker, final IdManagerService idManager, final NotificationPublishService notificationPublishService, AlivenessProtocolHandlerRegistry alivenessProtocolHandlerRegistry) { + super(dataBroker, LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.create(MonitoringStates.class).child(MonitoringState.class), + org.opendaylight.infrautils.utils.concurrent.Executors + .newSingleThreadExecutor("AlivenessMonitor", LOG)); this.dataBroker = dataBroker; this.txRunner = new ManagedNewTransactionRunnerImpl(dataBroker); this.idManager = idManager; @@ -727,7 +734,7 @@ public class AlivenessMonitor .resetMonitoringTask(false); return true; } - ScheduledFuture scheduledFutureResult = monitoringTasks.get(monitorId); + ScheduledFuture scheduledFutureResult = monitoringTasks.remove(monitorId); if (scheduledFutureResult != null) { scheduledFutureResult.cancel(interruptTask); return true; @@ -1285,4 +1292,38 @@ public class AlivenessMonitor return read(LogicalDatastoreType.OPERATIONAL, getInterfaceMonitorMapId(interfaceName)) .toJavaUtil().map(InterfaceMonitorEntry::getMonitorIds).orElse(Collections.emptyList()); } + + @Override + public void add(@Nonnull MonitoringState newDataObject) { + + } + + @Override + public void remove(@Nonnull MonitoringState removedDataObject) { + final Long monitorId = removedDataObject.getMonitorId(); + LOG.debug("Monitor State remove listener invoked for monitor id: {}", monitorId); + + if (removedDataObject.getStatus() != MonitorStatus.Paused) { + ScheduledFuture scheduledFutureResult = monitoringTasks.get(monitorId); + if (scheduledFutureResult != null) { + LOG.debug("Stopping the task for Monitor id: {}", monitorId); + stopMonitoringTask(monitorId); + } + } + } + + @Override + public void update(@Nonnull MonitoringState originalDataObject, @Nonnull MonitoringState updatedDataObject) { + final Long monitorId = updatedDataObject.getMonitorId(); + LOG.debug("Monitor State update listener invoked for monitor id: {}", monitorId); + + if (updatedDataObject.getStatus() == MonitorStatus.Paused + && originalDataObject.getStatus() != MonitorStatus.Paused) { + ScheduledFuture scheduledFutureResult = monitoringTasks.get(monitorId); + if (scheduledFutureResult != null) { + LOG.debug("Stopping the task for Monitor id: {}", monitorId); + stopMonitoringTask(monitorId); + } + } + } } -- 2.36.6