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() {