Started refactoring Intent Manager
Introduced IntentData and reworked APIs
Change-Id: I1fa437ceb1b72c4017ac2da1573bfbeb64c0632a
diff --git a/core/api/src/main/java/org/onosproject/event/AbstractEventAccumulator.java b/core/api/src/main/java/org/onosproject/event/AbstractEventAccumulator.java
index 3e0372f..f3fc65f 100644
--- a/core/api/src/main/java/org/onosproject/event/AbstractEventAccumulator.java
+++ b/core/api/src/main/java/org/onosproject/event/AbstractEventAccumulator.java
@@ -15,35 +15,18 @@
*/
package org.onosproject.event;
-import com.google.common.collect.Lists;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onlab.util.AbstractAccumulator;
-import java.util.List;
import java.util.Timer;
-import java.util.TimerTask;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
/**
* Base implementation of an event accumulator. It allows triggering based on
* event inter-arrival time threshold, maximum batch life threshold and maximum
* batch size.
*/
-public abstract class AbstractEventAccumulator implements EventAccumulator {
-
- private Logger log = LoggerFactory.getLogger(AbstractEventAccumulator.class);
-
- private final Timer timer;
- private final int maxEvents;
- private final int maxBatchMillis;
- private final int maxIdleMillis;
-
- private TimerTask idleTask = new ProcessorTask();
- private TimerTask maxTask = new ProcessorTask();
-
- private List<Event> events = Lists.newArrayList();
+public abstract class AbstractEventAccumulator
+ extends AbstractAccumulator<Event>
+ implements EventAccumulator {
/**
* Creates an event accumulator capable of triggering on the specified
@@ -59,108 +42,6 @@
*/
protected AbstractEventAccumulator(Timer timer, int maxEvents,
int maxBatchMillis, int maxIdleMillis) {
- this.timer = checkNotNull(timer, "Timer cannot be null");
-
- checkArgument(maxEvents > 1, "Maximum number of events must be > 1");
- checkArgument(maxBatchMillis > 0, "Maximum millis must be positive");
- checkArgument(maxIdleMillis > 0, "Maximum idle millis must be positive");
-
- this.maxEvents = maxEvents;
- this.maxBatchMillis = maxBatchMillis;
- this.maxIdleMillis = maxIdleMillis;
- }
-
- @Override
- public void add(Event event) {
- idleTask = cancelIfActive(idleTask);
- events.add(event);
-
- // Did we hit the max event threshold?
- if (events.size() == maxEvents) {
- maxTask = cancelIfActive(maxTask);
- schedule(1);
- } else {
- // Otherwise, schedule idle task and if this is a first event
- // also schedule the max batch age task.
- idleTask = schedule(maxIdleMillis);
- if (events.size() == 1) {
- maxTask = schedule(maxBatchMillis);
- }
- }
- }
-
- // Schedules a new processor task given number of millis in the future.
- private TimerTask schedule(int millis) {
- TimerTask task = new ProcessorTask();
- timer.schedule(task, millis);
- return task;
- }
-
- // Cancels the specified task if it is active.
- private TimerTask cancelIfActive(TimerTask task) {
- if (task != null) {
- task.cancel();
- }
- return task;
- }
-
- // Task for triggering processing of accumulated events
- private class ProcessorTask extends TimerTask {
- @Override
- public void run() {
- try {
- idleTask = cancelIfActive(idleTask);
- maxTask = cancelIfActive(maxTask);
- processEvents(finalizeCurrentBatch());
- } catch (Exception e) {
- log.warn("Unable to process batch due to {}", e.getMessage());
- }
- }
- }
-
- // Demotes and returns the current batch of events and promotes a new one.
- private synchronized List<Event> finalizeCurrentBatch() {
- List<Event> toBeProcessed = events;
- events = Lists.newArrayList();
- return toBeProcessed;
- }
-
- /**
- * Returns the backing timer.
- *
- * @return backing timer
- */
- public Timer timer() {
- return timer;
- }
-
- /**
- * Returns the maximum number of events allowed to accumulate before
- * processing is triggered.
- *
- * @return max number of events
- */
- public int maxEvents() {
- return maxEvents;
- }
-
- /**
- * Returns the maximum number of millis allowed to expire since the first
- * event before processing is triggered.
- *
- * @return max number of millis a batch is allowed to last
- */
- public int maxBatchMillis() {
- return maxBatchMillis;
- }
-
- /**
- * Returns the maximum number of millis allowed to expire since the last
- * event arrival before processing is triggered.
- *
- * @return max number of millis since the last event
- */
- public int maxIdleMillis() {
- return maxIdleMillis;
+ super(timer, maxEvents, maxBatchMillis, maxIdleMillis);
}
}