AlivenessMonitor pause/stop should work in cluster 82/71282/5
authorNobin Mathew <nobin.mathew@ericsson.com>
Mon, 16 Apr 2018 09:37:41 +0000 (15:07 +0530)
committerFaseela K <faseela.k@ericsson.com>
Tue, 1 May 2018 07:39:50 +0000 (07:39 +0000)
JIRA: GENIUS-126
Change-Id: I464c3d6bdd67ebda2c47cdbb22d69e9b254b28c6
Signed-off-by: Nobin Mathew <nobin.mathew@ericsson.com>
(cherry picked from commit 95e03d7)

alivenessmonitor/alivenessmonitor-impl/src/main/java/org/opendaylight/genius/alivenessmonitor/internal/AlivenessMonitor.java

index 75e256d83f5fef45b29cca1c34198959d31bd675..e2fb584fe9f68b55ab45bb6ced52e3963741747c 100644 (file)
@@ -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<MonitoringState>
+        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);
+            }
+        }
+    }
 }