eliminated singletons 02/19102/1
authorMartin Bobak <mbobak@cisco.com>
Sat, 25 Apr 2015 23:01:57 +0000 (01:01 +0200)
committerMartin Bobak <mbobak@cisco.com>
Sun, 26 Apr 2015 10:30:32 +0000 (12:30 +0200)
 - LLDPAger was unable to restart because of init of timer in private ctor

Change-Id: Ifd0fd642a1936c646ae4bbf00720f81955dd44e5
Signed-off-by: Martin Bobak <mbobak@cisco.com>
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPDiscoveryListener.java
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPDiscoveryProvider.java
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPLinkAger.java

index 10acfcbd8438130430fdf767987fa06f1b1fb589..1c976ec7c8fa2285dabce19816bd4adafe634214 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.openflowplugin.applications.topology.lldp;
 
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
 import org.opendaylight.openflowplugin.applications.topology.lldp.utils.LLDPDiscoveryUtils;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkDiscovered;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkDiscoveredBuilder;
@@ -19,10 +20,11 @@ import org.slf4j.LoggerFactory;
 class LLDPDiscoveryListener implements PacketProcessingListener {
     static Logger LOG = LoggerFactory.getLogger(LLDPDiscoveryListener.class);
 
-    private LLDPDiscoveryProvider manager;
+    private LLDPLinkAger lldpLinkAger;
+    private NotificationProviderService notificationService;
 
-    LLDPDiscoveryListener(LLDPDiscoveryProvider manager) {
-        this.manager = manager;
+    LLDPDiscoveryListener(NotificationProviderService notificationService) {
+        this.notificationService = notificationService;
     }
 
     public void onPacketReceived(PacketReceived lldp) {
@@ -33,9 +35,12 @@ class LLDPDiscoveryListener implements PacketProcessingListener {
             ldb.setSource(new NodeConnectorRef(src));
             LinkDiscovered ld = ldb.build();
 
-            manager.getNotificationService().publish(ld);
-            LLDPLinkAger.getInstance().put(ld);
+            notificationService.publish(ld);
+            lldpLinkAger.put(ld);
         }
     }
 
+    public void setLldpLinkAger(LLDPLinkAger lldpLinkAger) {
+        this.lldpLinkAger = lldpLinkAger;
+    }
 }
index db8d9392c1ebafa71afa3df2efcfb238af3e9dad..39aa4f8d4681d91512dedc990d8d2611a50ed46f 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.openflowplugin.applications.topology.lldp;
 
 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.openflowplugin.applications.topology.lldp.utils.LLDPDiscoveryUtils;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.NotificationListener;
 import org.slf4j.Logger;
@@ -18,8 +19,9 @@ public class LLDPDiscoveryProvider implements AutoCloseable {
     private final static Logger LOG =  LoggerFactory.getLogger(LLDPDiscoveryProvider.class);
     private DataProviderService dataService;
     private NotificationProviderService notificationService;
-    private final LLDPDiscoveryListener commiter = new LLDPDiscoveryListener(LLDPDiscoveryProvider.this);
+
     private ListenerRegistration<NotificationListener> listenerRegistration;
+    private LLDPLinkAger lldpLinkAger;
 
     public DataProviderService getDataService() {
         return this.dataService;
@@ -38,9 +40,15 @@ public class LLDPDiscoveryProvider implements AutoCloseable {
     }
 
     public void start() {
-        ListenerRegistration<NotificationListener> registerNotificationListener = this.getNotificationService().registerNotificationListener(this.commiter);
+        lldpLinkAger = new LLDPLinkAger(LLDPDiscoveryUtils.LLDP_INTERVAL, LLDPDiscoveryUtils.LLDP_EXPIRATION_TIME);
+        lldpLinkAger.setNotificationService(notificationService);
+
+        LLDPDiscoveryListener committer = new LLDPDiscoveryListener(notificationService);
+        committer.setLldpLinkAger(lldpLinkAger);
+
+        ListenerRegistration<NotificationListener> registerNotificationListener =
+                notificationService.registerNotificationListener(committer);
         this.listenerRegistration = registerNotificationListener;
-        LLDPLinkAger.getInstance().setManager(this);
         LOG.info("LLDPDiscoveryListener Started.");
     }
 
@@ -50,7 +58,7 @@ public class LLDPDiscoveryProvider implements AutoCloseable {
             if (this.listenerRegistration!=null) {
                 this.listenerRegistration.close();
             }
-            LLDPLinkAger.getInstance().close();
+            lldpLinkAger.close();
         } catch (Exception e) {
             throw new Error(e);
         }
index 499d05e4102b37a682c25fc8f2413cf9626e6f58..67b74995f78d6a0ee5566013ff15cab05628a089 100644 (file)
@@ -9,43 +9,45 @@ package org.opendaylight.openflowplugin.applications.topology.lldp;
 
 import java.util.Date;
 import java.util.Map;
-import java.util.Timer;
 import java.util.Map.Entry;
+import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.ConcurrentHashMap;
-
-import org.opendaylight.openflowplugin.applications.topology.lldp.utils.LLDPDiscoveryUtils;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkDiscovered;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev130819.LinkRemovedBuilder;
 
 
-public class LLDPLinkAger {
-    private static final LLDPLinkAger instance = new LLDPLinkAger();
-    private Map<LinkDiscovered,Date> linkToDate = new ConcurrentHashMap<LinkDiscovered,Date>();
-    private LLDPDiscoveryProvider manager;
-    private Timer timer = new Timer();
+public class LLDPLinkAger implements AutoCloseable {
+    private final long linkExpirationTime;
+    private Map<LinkDiscovered, Date> linkToDate;
+    private Timer timer;
+    private NotificationProviderService notificationService;
 
-    public LLDPDiscoveryProvider getManager() {
-        return manager;
-    }
-    public void setManager(LLDPDiscoveryProvider manager) {
-        this.manager = manager;
-    }
-    private LLDPLinkAger() {
-        timer.schedule(new LLDPAgingTask(), 0,LLDPDiscoveryUtils.LLDP_INTERVAL);
-    }
-    public static LLDPLinkAger getInstance() {
-        return instance;
+    /**
+     * default ctor - start timer
+     */
+    public LLDPLinkAger(final long lldpInterval, final long linkExpirationTime) {
+        this.linkExpirationTime = linkExpirationTime;
+        linkToDate = new ConcurrentHashMap<>();
+        timer = new Timer();
+        timer.schedule(new LLDPAgingTask(), 0, lldpInterval);
     }
 
     public void put(LinkDiscovered link) {
         Date expires = new Date();
-        expires.setTime(expires.getTime() + LLDPDiscoveryUtils.LLDP_EXPIRATION_TIME);
+        expires.setTime(expires.getTime() + linkExpirationTime);
         linkToDate.put(link, expires);
     }
 
+    @Override
     public void close() {
         timer.cancel();
+        linkToDate.clear();
+    }
+
+    public void setNotificationService(NotificationProviderService notificationService) {
+        this.notificationService = notificationService;
     }
 
     private class LLDPAgingTask extends TimerTask {
@@ -57,9 +59,9 @@ public class LLDPLinkAger {
                 Date expires = entry.getValue();
                 Date now = new Date();
                 if(now.after(expires)) {
-                    if(getInstance().getManager() != null) {
+                    if (notificationService != null) {
                         LinkRemovedBuilder lrb = new LinkRemovedBuilder(link);
-                        getInstance().getManager().getNotificationService().publish(lrb.build());
+                        notificationService.publish(lrb.build());
                         linkToDate.remove(link);
                     }
                 }