Flow stats collection optimization - Flag introduced to stop periodic collection and collect only in 3 scenarios (Flows Add/Delete/Mod, Switch Add/Change, Mastership Change)

Change-Id: I1ad143a416f34135a622818c60dbc97310fe905e
diff --git a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java
index 638c195..4aa6b21 100644
--- a/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java
+++ b/providers/openflow/flow/src/main/java/org/onosproject/provider/of/flow/impl/FlowStatsCollector.java
@@ -217,15 +217,21 @@
     }
 
     public synchronized void start() {
-        // Initially start polling quickly. Then drop down to configured value
         log.debug("Starting Stats collection thread for {}", sw.getStringId());
         loadCounter = new SlidingWindowCounter(HIGH_WINDOW);
-        pauseTask = new PauseTimerTask();
-        scheduledPauseTask = executorService.scheduleAtFixedRate(pauseTask, 1 * MS,
-                                            1 * MS, TimeUnit.MILLISECONDS);
-        pollTask = new PollTimerTask();
-        scheduledPollTask = executorService.scheduleAtFixedRate(pollTask, 1 * MS,
-                                            pollInterval * MS, TimeUnit.MILLISECONDS);
+        if (pollInterval > 0) {
+            pauseTask = new PauseTimerTask();
+            scheduledPauseTask = executorService.scheduleAtFixedRate(pauseTask, 1 * MS,
+                    1 * MS, TimeUnit.MILLISECONDS);
+            pollTask = new PollTimerTask();
+            // Initially start polling quickly. Then drop down to configured value
+            scheduledPollTask = executorService.scheduleAtFixedRate(pollTask, 1 * MS,
+                    pollInterval * MS, TimeUnit.MILLISECONDS);
+        } else {
+            // Trigger the poll only once
+            pollTask = new PollTimerTask();
+            executorService.schedule(pollTask, 0, TimeUnit.MILLISECONDS);
+        }
     }
 
     private synchronized void pause() {