Committed by
Ray Milkey
Updated accumulator documentation and refactored names to remove the event heritage.
Change-Id: I2238ab1215281702e670a406fb901ba8a4ef85ce
Showing
8 changed files
with
88 additions
and
156 deletions
| 1 | -/* | ||
| 2 | - * Copyright 2014 Open Networking Laboratory | ||
| 3 | - * | ||
| 4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | - * you may not use this file except in compliance with the License. | ||
| 6 | - * You may obtain a copy of the License at | ||
| 7 | - * | ||
| 8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | - * | ||
| 10 | - * Unless required by applicable law or agreed to in writing, software | ||
| 11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | - * See the License for the specific language governing permissions and | ||
| 14 | - * limitations under the License. | ||
| 15 | - */ | ||
| 16 | -package org.onosproject.event; | ||
| 17 | - | ||
| 18 | -import org.onlab.util.AbstractAccumulator; | ||
| 19 | - | ||
| 20 | -import java.util.Timer; | ||
| 21 | - | ||
| 22 | -/** | ||
| 23 | - * Base implementation of an event accumulator. It allows triggering based on | ||
| 24 | - * event inter-arrival time threshold, maximum batch life threshold and maximum | ||
| 25 | - * batch size. | ||
| 26 | - */ | ||
| 27 | -public abstract class AbstractEventAccumulator | ||
| 28 | - extends AbstractAccumulator<Event> | ||
| 29 | - implements EventAccumulator { | ||
| 30 | - | ||
| 31 | - /** | ||
| 32 | - * Creates an event accumulator capable of triggering on the specified | ||
| 33 | - * thresholds. | ||
| 34 | - * | ||
| 35 | - * @param timer timer to use for scheduling check-points | ||
| 36 | - * @param maxEvents maximum number of events to accumulate before | ||
| 37 | - * processing is triggered | ||
| 38 | - * @param maxBatchMillis maximum number of millis allowed since the first | ||
| 39 | - * event before processing is triggered | ||
| 40 | - * @param maxIdleMillis maximum number millis between events before | ||
| 41 | - * processing is triggered | ||
| 42 | - */ | ||
| 43 | - protected AbstractEventAccumulator(Timer timer, int maxEvents, | ||
| 44 | - int maxBatchMillis, int maxIdleMillis) { | ||
| 45 | - super(timer, maxEvents, maxBatchMillis, maxIdleMillis); | ||
| 46 | - } | ||
| 47 | -} |
| 1 | -/* | ||
| 2 | - * Copyright 2014 Open Networking Laboratory | ||
| 3 | - * | ||
| 4 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | - * you may not use this file except in compliance with the License. | ||
| 6 | - * You may obtain a copy of the License at | ||
| 7 | - * | ||
| 8 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | - * | ||
| 10 | - * Unless required by applicable law or agreed to in writing, software | ||
| 11 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | - * See the License for the specific language governing permissions and | ||
| 14 | - * limitations under the License. | ||
| 15 | - */ | ||
| 16 | -package org.onosproject.event; | ||
| 17 | - | ||
| 18 | -import org.onlab.util.Accumulator; | ||
| 19 | - | ||
| 20 | -/** | ||
| 21 | - * Abstraction of an accumulator capable of collecting events and at some | ||
| 22 | - * point in time triggers processing of all previously accumulated events. | ||
| 23 | - */ | ||
| 24 | -public interface EventAccumulator extends Accumulator<Event> { | ||
| 25 | -} |
| ... | @@ -53,8 +53,8 @@ public class IntentAccumulator extends AbstractAccumulator<IntentData> { | ... | @@ -53,8 +53,8 @@ public class IntentAccumulator extends AbstractAccumulator<IntentData> { |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | @Override | 55 | @Override |
| 56 | - public void processEvents(List<IntentData> ops) { | 56 | + public void processItems(List<IntentData> items) { |
| 57 | - delegate.execute(reduce(ops)); | 57 | + delegate.execute(reduce(items)); |
| 58 | // FIXME kick off the work | 58 | // FIXME kick off the work |
| 59 | //for (IntentData data : opMap.values()) {} | 59 | //for (IntentData data : opMap.values()) {} |
| 60 | } | 60 | } | ... | ... |
| ... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
| 16 | package org.onosproject.net.topology.impl; | 16 | package org.onosproject.net.topology.impl; |
| 17 | 17 | ||
| 18 | import com.google.common.collect.ImmutableList; | 18 | import com.google.common.collect.ImmutableList; |
| 19 | - | ||
| 20 | import org.apache.felix.scr.annotations.Activate; | 19 | import org.apache.felix.scr.annotations.Activate; |
| 21 | import org.apache.felix.scr.annotations.Component; | 20 | import org.apache.felix.scr.annotations.Component; |
| 22 | import org.apache.felix.scr.annotations.Deactivate; | 21 | import org.apache.felix.scr.annotations.Deactivate; |
| ... | @@ -25,9 +24,9 @@ import org.apache.felix.scr.annotations.Property; | ... | @@ -25,9 +24,9 @@ import org.apache.felix.scr.annotations.Property; |
| 25 | import org.apache.felix.scr.annotations.Reference; | 24 | import org.apache.felix.scr.annotations.Reference; |
| 26 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 25 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
| 27 | import org.apache.felix.scr.annotations.Service; | 26 | import org.apache.felix.scr.annotations.Service; |
| 28 | -import org.onosproject.event.AbstractEventAccumulator; | 27 | +import org.onlab.util.AbstractAccumulator; |
| 28 | +import org.onlab.util.Accumulator; | ||
| 29 | import org.onosproject.event.Event; | 29 | import org.onosproject.event.Event; |
| 30 | -import org.onosproject.event.EventAccumulator; | ||
| 31 | import org.onosproject.net.device.DeviceEvent; | 30 | import org.onosproject.net.device.DeviceEvent; |
| 32 | import org.onosproject.net.device.DeviceListener; | 31 | import org.onosproject.net.device.DeviceListener; |
| 33 | import org.onosproject.net.device.DeviceService; | 32 | import org.onosproject.net.device.DeviceService; |
| ... | @@ -51,9 +50,9 @@ import java.util.concurrent.ExecutorService; | ... | @@ -51,9 +50,9 @@ import java.util.concurrent.ExecutorService; |
| 51 | 50 | ||
| 52 | import static com.google.common.base.Strings.isNullOrEmpty; | 51 | import static com.google.common.base.Strings.isNullOrEmpty; |
| 53 | import static java.util.concurrent.Executors.newFixedThreadPool; | 52 | import static java.util.concurrent.Executors.newFixedThreadPool; |
| 53 | +import static org.onlab.util.Tools.namedThreads; | ||
| 54 | import static org.onosproject.core.CoreService.CORE_PROVIDER_ID; | 54 | import static org.onosproject.core.CoreService.CORE_PROVIDER_ID; |
| 55 | import static org.onosproject.net.device.DeviceEvent.Type.*; | 55 | import static org.onosproject.net.device.DeviceEvent.Type.*; |
| 56 | -import static org.onlab.util.Tools.namedThreads; | ||
| 57 | import static org.slf4j.LoggerFactory.getLogger; | 56 | import static org.slf4j.LoggerFactory.getLogger; |
| 58 | 57 | ||
| 59 | /** | 58 | /** |
| ... | @@ -104,7 +103,7 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -104,7 +103,7 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 104 | private DeviceListener deviceListener = new InternalDeviceListener(); | 103 | private DeviceListener deviceListener = new InternalDeviceListener(); |
| 105 | private LinkListener linkListener = new InternalLinkListener(); | 104 | private LinkListener linkListener = new InternalLinkListener(); |
| 106 | 105 | ||
| 107 | - private EventAccumulator accumulator; | 106 | + private Accumulator<Event> accumulator; |
| 108 | private ExecutorService executor; | 107 | private ExecutorService executor; |
| 109 | 108 | ||
| 110 | /** | 109 | /** |
| ... | @@ -245,18 +244,15 @@ public class DefaultTopologyProvider extends AbstractProvider | ... | @@ -245,18 +244,15 @@ public class DefaultTopologyProvider extends AbstractProvider |
| 245 | } | 244 | } |
| 246 | 245 | ||
| 247 | // Event accumulator for paced triggering of topology assembly. | 246 | // Event accumulator for paced triggering of topology assembly. |
| 248 | - private class TopologyChangeAccumulator | 247 | + private class TopologyChangeAccumulator extends AbstractAccumulator<Event> { |
| 249 | - extends AbstractEventAccumulator implements EventAccumulator { | ||
| 250 | - | ||
| 251 | TopologyChangeAccumulator() { | 248 | TopologyChangeAccumulator() { |
| 252 | super(TIMER, maxEvents, maxBatchMs, maxIdleMs); | 249 | super(TIMER, maxEvents, maxBatchMs, maxIdleMs); |
| 253 | } | 250 | } |
| 254 | 251 | ||
| 255 | @Override | 252 | @Override |
| 256 | - public void processEvents(List<Event> events) { | 253 | + public void processItems(List<Event> items) { |
| 257 | - triggerTopologyBuild(events); | 254 | + triggerTopologyBuild(items); |
| 258 | } | 255 | } |
| 259 | - | ||
| 260 | } | 256 | } |
| 261 | 257 | ||
| 262 | // Task for building topology data in a separate thread. | 258 | // Task for building topology data in a separate thread. | ... | ... |
| ... | @@ -27,64 +27,63 @@ import static com.google.common.base.Preconditions.checkArgument; | ... | @@ -27,64 +27,63 @@ import static com.google.common.base.Preconditions.checkArgument; |
| 27 | import static com.google.common.base.Preconditions.checkNotNull; | 27 | import static com.google.common.base.Preconditions.checkNotNull; |
| 28 | 28 | ||
| 29 | /** | 29 | /** |
| 30 | - * Base implementation of an event accumulator. It allows triggering based on | 30 | + * Base implementation of an item accumulator. It allows triggering based on |
| 31 | - * event inter-arrival time threshold, maximum batch life threshold and maximum | 31 | + * item inter-arrival time threshold, maximum batch life threshold and maximum |
| 32 | * batch size. | 32 | * batch size. |
| 33 | */ | 33 | */ |
| 34 | -// FIXME refactor the names here | ||
| 35 | public abstract class AbstractAccumulator<T> implements Accumulator<T> { | 34 | public abstract class AbstractAccumulator<T> implements Accumulator<T> { |
| 36 | 35 | ||
| 37 | private Logger log = LoggerFactory.getLogger(AbstractAccumulator.class); | 36 | private Logger log = LoggerFactory.getLogger(AbstractAccumulator.class); |
| 38 | 37 | ||
| 39 | private final Timer timer; | 38 | private final Timer timer; |
| 40 | - private final int maxEvents; | 39 | + private final int maxItems; |
| 41 | private final int maxBatchMillis; | 40 | private final int maxBatchMillis; |
| 42 | private final int maxIdleMillis; | 41 | private final int maxIdleMillis; |
| 43 | 42 | ||
| 44 | private TimerTask idleTask = new ProcessorTask(); | 43 | private TimerTask idleTask = new ProcessorTask(); |
| 45 | private TimerTask maxTask = new ProcessorTask(); | 44 | private TimerTask maxTask = new ProcessorTask(); |
| 46 | 45 | ||
| 47 | - private List<T> events = Lists.newArrayList(); | 46 | + private List<T> items = Lists.newArrayList(); |
| 48 | 47 | ||
| 49 | /** | 48 | /** |
| 50 | - * Creates an event accumulator capable of triggering on the specified | 49 | + * Creates an item accumulator capable of triggering on the specified |
| 51 | * thresholds. | 50 | * thresholds. |
| 52 | * | 51 | * |
| 53 | - * @param timer timer to use for scheduling check-points | 52 | + * @param timer timer to use for scheduling check-points |
| 54 | - * @param maxEvents maximum number of events to accumulate before | 53 | + * @param maxItems maximum number of items to accumulate before |
| 55 | - * processing is triggered | 54 | + * processing is triggered |
| 56 | - * @param maxBatchMillis maximum number of millis allowed since the first | 55 | + * @param maxBatchMillis maximum number of millis allowed since the first |
| 57 | - * event before processing is triggered | 56 | + * item before processing is triggered |
| 58 | - * @param maxIdleMillis maximum number millis between events before | 57 | + * @param maxIdleMillis maximum number millis between items before |
| 59 | - * processing is triggered | 58 | + * processing is triggered |
| 60 | */ | 59 | */ |
| 61 | - protected AbstractAccumulator(Timer timer, int maxEvents, | 60 | + protected AbstractAccumulator(Timer timer, int maxItems, |
| 62 | int maxBatchMillis, int maxIdleMillis) { | 61 | int maxBatchMillis, int maxIdleMillis) { |
| 63 | this.timer = checkNotNull(timer, "Timer cannot be null"); | 62 | this.timer = checkNotNull(timer, "Timer cannot be null"); |
| 64 | 63 | ||
| 65 | - checkArgument(maxEvents > 1, "Maximum number of events must be > 1"); | 64 | + checkArgument(maxItems > 1, "Maximum number of items must be > 1"); |
| 66 | checkArgument(maxBatchMillis > 0, "Maximum millis must be positive"); | 65 | checkArgument(maxBatchMillis > 0, "Maximum millis must be positive"); |
| 67 | checkArgument(maxIdleMillis > 0, "Maximum idle millis must be positive"); | 66 | checkArgument(maxIdleMillis > 0, "Maximum idle millis must be positive"); |
| 68 | 67 | ||
| 69 | - this.maxEvents = maxEvents; | 68 | + this.maxItems = maxItems; |
| 70 | this.maxBatchMillis = maxBatchMillis; | 69 | this.maxBatchMillis = maxBatchMillis; |
| 71 | this.maxIdleMillis = maxIdleMillis; | 70 | this.maxIdleMillis = maxIdleMillis; |
| 72 | } | 71 | } |
| 73 | 72 | ||
| 74 | @Override | 73 | @Override |
| 75 | - public synchronized void add(T event) { | 74 | + public synchronized void add(T item) { |
| 76 | idleTask = cancelIfActive(idleTask); | 75 | idleTask = cancelIfActive(idleTask); |
| 77 | - events.add(checkNotNull(event, "Event cannot be null")); | 76 | + items.add(checkNotNull(item, "Item cannot be null")); |
| 78 | 77 | ||
| 79 | - // Did we hit the max event threshold? | 78 | + // Did we hit the max item threshold? |
| 80 | - if (events.size() == maxEvents) { | 79 | + if (items.size() == maxItems) { |
| 81 | maxTask = cancelIfActive(maxTask); | 80 | maxTask = cancelIfActive(maxTask); |
| 82 | schedule(1); | 81 | schedule(1); |
| 83 | } else { | 82 | } else { |
| 84 | - // Otherwise, schedule idle task and if this is a first event | 83 | + // Otherwise, schedule idle task and if this is a first item |
| 85 | // also schedule the max batch age task. | 84 | // also schedule the max batch age task. |
| 86 | idleTask = schedule(maxIdleMillis); | 85 | idleTask = schedule(maxIdleMillis); |
| 87 | - if (events.size() == 1) { | 86 | + if (items.size() == 1) { |
| 88 | maxTask = schedule(maxBatchMillis); | 87 | maxTask = schedule(maxBatchMillis); |
| 89 | } | 88 | } |
| 90 | } | 89 | } |
| ... | @@ -105,24 +104,24 @@ public abstract class AbstractAccumulator<T> implements Accumulator<T> { | ... | @@ -105,24 +104,24 @@ public abstract class AbstractAccumulator<T> implements Accumulator<T> { |
| 105 | return task; | 104 | return task; |
| 106 | } | 105 | } |
| 107 | 106 | ||
| 108 | - // Task for triggering processing of accumulated events | 107 | + // Task for triggering processing of accumulated items |
| 109 | private class ProcessorTask extends TimerTask { | 108 | private class ProcessorTask extends TimerTask { |
| 110 | @Override | 109 | @Override |
| 111 | public void run() { | 110 | public void run() { |
| 112 | try { | 111 | try { |
| 113 | idleTask = cancelIfActive(idleTask); | 112 | idleTask = cancelIfActive(idleTask); |
| 114 | maxTask = cancelIfActive(maxTask); | 113 | maxTask = cancelIfActive(maxTask); |
| 115 | - processEvents(finalizeCurrentBatch()); | 114 | + processItems(finalizeCurrentBatch()); |
| 116 | } catch (Exception e) { | 115 | } catch (Exception e) { |
| 117 | log.warn("Unable to process batch due to {}", e); | 116 | log.warn("Unable to process batch due to {}", e); |
| 118 | } | 117 | } |
| 119 | } | 118 | } |
| 120 | } | 119 | } |
| 121 | 120 | ||
| 122 | - // Demotes and returns the current batch of events and promotes a new one. | 121 | + // Demotes and returns the current batch of items and promotes a new one. |
| 123 | private synchronized List<T> finalizeCurrentBatch() { | 122 | private synchronized List<T> finalizeCurrentBatch() { |
| 124 | - List<T> toBeProcessed = events; | 123 | + List<T> toBeProcessed = items; |
| 125 | - events = Lists.newArrayList(); | 124 | + items = Lists.newArrayList(); |
| 126 | return toBeProcessed; | 125 | return toBeProcessed; |
| 127 | } | 126 | } |
| 128 | 127 | ||
| ... | @@ -136,18 +135,18 @@ public abstract class AbstractAccumulator<T> implements Accumulator<T> { | ... | @@ -136,18 +135,18 @@ public abstract class AbstractAccumulator<T> implements Accumulator<T> { |
| 136 | } | 135 | } |
| 137 | 136 | ||
| 138 | /** | 137 | /** |
| 139 | - * Returns the maximum number of events allowed to accumulate before | 138 | + * Returns the maximum number of items allowed to accumulate before |
| 140 | * processing is triggered. | 139 | * processing is triggered. |
| 141 | * | 140 | * |
| 142 | - * @return max number of events | 141 | + * @return max number of items |
| 143 | */ | 142 | */ |
| 144 | - public int maxEvents() { | 143 | + public int maxItems() { |
| 145 | - return maxEvents; | 144 | + return maxItems; |
| 146 | } | 145 | } |
| 147 | 146 | ||
| 148 | /** | 147 | /** |
| 149 | * Returns the maximum number of millis allowed to expire since the first | 148 | * Returns the maximum number of millis allowed to expire since the first |
| 150 | - * event before processing is triggered. | 149 | + * item before processing is triggered. |
| 151 | * | 150 | * |
| 152 | * @return max number of millis a batch is allowed to last | 151 | * @return max number of millis a batch is allowed to last |
| 153 | */ | 152 | */ |
| ... | @@ -157,9 +156,9 @@ public abstract class AbstractAccumulator<T> implements Accumulator<T> { | ... | @@ -157,9 +156,9 @@ public abstract class AbstractAccumulator<T> implements Accumulator<T> { |
| 157 | 156 | ||
| 158 | /** | 157 | /** |
| 159 | * Returns the maximum number of millis allowed to expire since the last | 158 | * Returns the maximum number of millis allowed to expire since the last |
| 160 | - * event arrival before processing is triggered. | 159 | + * item arrival before processing is triggered. |
| 161 | * | 160 | * |
| 162 | - * @return max number of millis since the last event | 161 | + * @return max number of millis since the last item |
| 163 | */ | 162 | */ |
| 164 | public int maxIdleMillis() { | 163 | public int maxIdleMillis() { |
| 165 | return maxIdleMillis; | 164 | return maxIdleMillis; | ... | ... |
| ... | @@ -18,25 +18,28 @@ package org.onlab.util; | ... | @@ -18,25 +18,28 @@ package org.onlab.util; |
| 18 | import java.util.List; | 18 | import java.util.List; |
| 19 | 19 | ||
| 20 | /** | 20 | /** |
| 21 | - * Abstraction of an accumulator capable of collecting events and at some | 21 | + * Abstraction of an accumulator capable of collecting items and at some |
| 22 | - * point in time triggers processing of all previously accumulated events. | 22 | + * point in time triggers processing of all previously accumulated items. |
| 23 | + * | ||
| 24 | + * @param <T> item type | ||
| 23 | */ | 25 | */ |
| 24 | public interface Accumulator<T> { | 26 | public interface Accumulator<T> { |
| 25 | 27 | ||
| 26 | /** | 28 | /** |
| 27 | - * Adds an event to the current batch. This operation may, or may not | 29 | + * Adds an item to the current batch. This operation may, or may not |
| 28 | - * trigger processing of the current batch of events. | 30 | + * trigger processing of the current batch of items. |
| 29 | * | 31 | * |
| 30 | - * @param event event to be added to the current batch | 32 | + * @param item item to be added to the current batch |
| 31 | */ | 33 | */ |
| 32 | - void add(T event); | 34 | + void add(T item); |
| 33 | 35 | ||
| 34 | /** | 36 | /** |
| 35 | - * Processes the specified list of accumulated events. | 37 | + * Processes the specified list of accumulated items. |
| 36 | * | 38 | * |
| 37 | - * @param events list of accumulated events | 39 | + * @param items list of accumulated items |
| 38 | */ | 40 | */ |
| 39 | - void processEvents(List<T> events); | 41 | + void processItems(List<T> items); |
| 40 | 42 | ||
| 41 | //TODO consider a blocking version that required consumer participation | 43 | //TODO consider a blocking version that required consumer participation |
| 44 | + | ||
| 42 | } | 45 | } | ... | ... |
| 1 | /* | 1 | /* |
| 2 | - * Copyright 2014 Open Networking Laboratory | 2 | + * Copyright 2015 Open Networking Laboratory |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| ... | @@ -13,7 +13,7 @@ | ... | @@ -13,7 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | -package org.onosproject.event; | 16 | +package org.onlab.util; |
| 17 | 17 | ||
| 18 | import org.junit.Ignore; | 18 | import org.junit.Ignore; |
| 19 | import org.junit.Test; | 19 | import org.junit.Test; |
| ... | @@ -21,16 +21,13 @@ import org.junit.Test; | ... | @@ -21,16 +21,13 @@ import org.junit.Test; |
| 21 | import java.util.List; | 21 | import java.util.List; |
| 22 | import java.util.Timer; | 22 | import java.util.Timer; |
| 23 | 23 | ||
| 24 | -import static org.junit.Assert.assertEquals; | 24 | +import static org.junit.Assert.*; |
| 25 | -import static org.junit.Assert.assertFalse; | ||
| 26 | -import static org.junit.Assert.assertTrue; | ||
| 27 | import static org.onlab.junit.TestTools.delay; | 25 | import static org.onlab.junit.TestTools.delay; |
| 28 | -import static org.onosproject.event.TestEvent.Type.FOO; | ||
| 29 | 26 | ||
| 30 | /** | 27 | /** |
| 31 | * Tests the operation of the accumulator. | 28 | * Tests the operation of the accumulator. |
| 32 | */ | 29 | */ |
| 33 | -public class AbstractEventAccumulatorTest { | 30 | +public class AbstractAccumulatorTest { |
| 34 | 31 | ||
| 35 | private final Timer timer = new Timer(); | 32 | private final Timer timer = new Timer(); |
| 36 | 33 | ||
| ... | @@ -38,7 +35,7 @@ public class AbstractEventAccumulatorTest { | ... | @@ -38,7 +35,7 @@ public class AbstractEventAccumulatorTest { |
| 38 | public void basics() throws Exception { | 35 | public void basics() throws Exception { |
| 39 | TestAccumulator accumulator = new TestAccumulator(); | 36 | TestAccumulator accumulator = new TestAccumulator(); |
| 40 | assertEquals("incorrect timer", timer, accumulator.timer()); | 37 | assertEquals("incorrect timer", timer, accumulator.timer()); |
| 41 | - assertEquals("incorrect max events", 5, accumulator.maxEvents()); | 38 | + assertEquals("incorrect max events", 5, accumulator.maxItems()); |
| 42 | assertEquals("incorrect max ms", 100, accumulator.maxBatchMillis()); | 39 | assertEquals("incorrect max ms", 100, accumulator.maxBatchMillis()); |
| 43 | assertEquals("incorrect idle ms", 50, accumulator.maxIdleMillis()); | 40 | assertEquals("incorrect idle ms", 50, accumulator.maxIdleMillis()); |
| 44 | } | 41 | } |
| ... | @@ -46,12 +43,12 @@ public class AbstractEventAccumulatorTest { | ... | @@ -46,12 +43,12 @@ public class AbstractEventAccumulatorTest { |
| 46 | @Test | 43 | @Test |
| 47 | public void eventTrigger() { | 44 | public void eventTrigger() { |
| 48 | TestAccumulator accumulator = new TestAccumulator(); | 45 | TestAccumulator accumulator = new TestAccumulator(); |
| 49 | - accumulator.add(new TestEvent(FOO, "a")); | 46 | + accumulator.add(new TestItem("a")); |
| 50 | - accumulator.add(new TestEvent(FOO, "b")); | 47 | + accumulator.add(new TestItem("b")); |
| 51 | - accumulator.add(new TestEvent(FOO, "c")); | 48 | + accumulator.add(new TestItem("c")); |
| 52 | - accumulator.add(new TestEvent(FOO, "d")); | 49 | + accumulator.add(new TestItem("d")); |
| 53 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); | 50 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); |
| 54 | - accumulator.add(new TestEvent(FOO, "e")); | 51 | + accumulator.add(new TestItem("e")); |
| 55 | delay(20); | 52 | delay(20); |
| 56 | assertFalse("should have fired", accumulator.batch.isEmpty()); | 53 | assertFalse("should have fired", accumulator.batch.isEmpty()); |
| 57 | assertEquals("incorrect batch", "abcde", accumulator.batch); | 54 | assertEquals("incorrect batch", "abcde", accumulator.batch); |
| ... | @@ -61,16 +58,16 @@ public class AbstractEventAccumulatorTest { | ... | @@ -61,16 +58,16 @@ public class AbstractEventAccumulatorTest { |
| 61 | @Test | 58 | @Test |
| 62 | public void timeTrigger() { | 59 | public void timeTrigger() { |
| 63 | TestAccumulator accumulator = new TestAccumulator(); | 60 | TestAccumulator accumulator = new TestAccumulator(); |
| 64 | - accumulator.add(new TestEvent(FOO, "a")); | 61 | + accumulator.add(new TestItem("a")); |
| 65 | delay(30); | 62 | delay(30); |
| 66 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); | 63 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); |
| 67 | - accumulator.add(new TestEvent(FOO, "b")); | 64 | + accumulator.add(new TestItem("b")); |
| 68 | delay(30); | 65 | delay(30); |
| 69 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); | 66 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); |
| 70 | - accumulator.add(new TestEvent(FOO, "c")); | 67 | + accumulator.add(new TestItem("c")); |
| 71 | delay(30); | 68 | delay(30); |
| 72 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); | 69 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); |
| 73 | - accumulator.add(new TestEvent(FOO, "d")); | 70 | + accumulator.add(new TestItem("d")); |
| 74 | delay(30); | 71 | delay(30); |
| 75 | assertFalse("should have fired", accumulator.batch.isEmpty()); | 72 | assertFalse("should have fired", accumulator.batch.isEmpty()); |
| 76 | assertEquals("incorrect batch", "abcd", accumulator.batch); | 73 | assertEquals("incorrect batch", "abcd", accumulator.batch); |
| ... | @@ -79,15 +76,23 @@ public class AbstractEventAccumulatorTest { | ... | @@ -79,15 +76,23 @@ public class AbstractEventAccumulatorTest { |
| 79 | @Test | 76 | @Test |
| 80 | public void idleTrigger() { | 77 | public void idleTrigger() { |
| 81 | TestAccumulator accumulator = new TestAccumulator(); | 78 | TestAccumulator accumulator = new TestAccumulator(); |
| 82 | - accumulator.add(new TestEvent(FOO, "a")); | 79 | + accumulator.add(new TestItem("a")); |
| 83 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); | 80 | assertTrue("should not have fired yet", accumulator.batch.isEmpty()); |
| 84 | - accumulator.add(new TestEvent(FOO, "b")); | 81 | + accumulator.add(new TestItem("b")); |
| 85 | delay(80); | 82 | delay(80); |
| 86 | assertFalse("should have fired", accumulator.batch.isEmpty()); | 83 | assertFalse("should have fired", accumulator.batch.isEmpty()); |
| 87 | assertEquals("incorrect batch", "ab", accumulator.batch); | 84 | assertEquals("incorrect batch", "ab", accumulator.batch); |
| 88 | } | 85 | } |
| 89 | 86 | ||
| 90 | - private class TestAccumulator extends AbstractEventAccumulator { | 87 | + private class TestItem { |
| 88 | + private final String s; | ||
| 89 | + | ||
| 90 | + public TestItem(String s) { | ||
| 91 | + this.s = s; | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + private class TestAccumulator extends AbstractAccumulator<TestItem> { | ||
| 91 | 96 | ||
| 92 | String batch = ""; | 97 | String batch = ""; |
| 93 | 98 | ||
| ... | @@ -96,10 +101,11 @@ public class AbstractEventAccumulatorTest { | ... | @@ -96,10 +101,11 @@ public class AbstractEventAccumulatorTest { |
| 96 | } | 101 | } |
| 97 | 102 | ||
| 98 | @Override | 103 | @Override |
| 99 | - public void processEvents(List<Event> events) { | 104 | + public void processItems(List<TestItem> items) { |
| 100 | - for (Event event : events) { | 105 | + for (TestItem item : items) { |
| 101 | - batch += event.subject(); | 106 | + batch += item.s; |
| 102 | } | 107 | } |
| 103 | } | 108 | } |
| 104 | } | 109 | } |
| 110 | + | ||
| 105 | } | 111 | } | ... | ... |
| ... | @@ -20,14 +20,14 @@ import com.fasterxml.jackson.databind.node.ArrayNode; | ... | @@ -20,14 +20,14 @@ import com.fasterxml.jackson.databind.node.ArrayNode; |
| 20 | import com.fasterxml.jackson.databind.node.ObjectNode; | 20 | import com.fasterxml.jackson.databind.node.ObjectNode; |
| 21 | import org.eclipse.jetty.websocket.WebSocket; | 21 | import org.eclipse.jetty.websocket.WebSocket; |
| 22 | import org.onlab.osgi.ServiceDirectory; | 22 | import org.onlab.osgi.ServiceDirectory; |
| 23 | +import org.onlab.util.AbstractAccumulator; | ||
| 24 | +import org.onlab.util.Accumulator; | ||
| 23 | import org.onosproject.cluster.ClusterEvent; | 25 | import org.onosproject.cluster.ClusterEvent; |
| 24 | import org.onosproject.cluster.ClusterEventListener; | 26 | import org.onosproject.cluster.ClusterEventListener; |
| 25 | import org.onosproject.cluster.ControllerNode; | 27 | import org.onosproject.cluster.ControllerNode; |
| 26 | import org.onosproject.core.ApplicationId; | 28 | import org.onosproject.core.ApplicationId; |
| 27 | import org.onosproject.core.CoreService; | 29 | import org.onosproject.core.CoreService; |
| 28 | -import org.onosproject.event.AbstractEventAccumulator; | ||
| 29 | import org.onosproject.event.Event; | 30 | import org.onosproject.event.Event; |
| 30 | -import org.onosproject.event.EventAccumulator; | ||
| 31 | import org.onosproject.mastership.MastershipAdminService; | 31 | import org.onosproject.mastership.MastershipAdminService; |
| 32 | import org.onosproject.mastership.MastershipEvent; | 32 | import org.onosproject.mastership.MastershipEvent; |
| 33 | import org.onosproject.mastership.MastershipListener; | 33 | import org.onosproject.mastership.MastershipListener; |
| ... | @@ -120,7 +120,7 @@ public class TopologyViewWebSocket | ... | @@ -120,7 +120,7 @@ public class TopologyViewWebSocket |
| 120 | private final IntentListener intentListener = new InternalIntentListener(); | 120 | private final IntentListener intentListener = new InternalIntentListener(); |
| 121 | private final FlowRuleListener flowListener = new InternalFlowListener(); | 121 | private final FlowRuleListener flowListener = new InternalFlowListener(); |
| 122 | 122 | ||
| 123 | - private final EventAccumulator eventAccummulator = new InternalEventAccummulator(); | 123 | + private final Accumulator<Event> eventAccummulator = new InternalEventAccummulator(); |
| 124 | 124 | ||
| 125 | private TimerTask trafficTask; | 125 | private TimerTask trafficTask; |
| 126 | private ObjectNode trafficEvent; | 126 | private ObjectNode trafficEvent; |
| ... | @@ -721,13 +721,13 @@ public class TopologyViewWebSocket | ... | @@ -721,13 +721,13 @@ public class TopologyViewWebSocket |
| 721 | } | 721 | } |
| 722 | 722 | ||
| 723 | // Accumulates events to drive methodic update of the summary pane. | 723 | // Accumulates events to drive methodic update of the summary pane. |
| 724 | - private class InternalEventAccummulator extends AbstractEventAccumulator { | 724 | + private class InternalEventAccummulator extends AbstractAccumulator<Event> { |
| 725 | protected InternalEventAccummulator() { | 725 | protected InternalEventAccummulator() { |
| 726 | super(new Timer("topo-summary"), MAX_EVENTS, MAX_BATCH_MS, MAX_IDLE_MS); | 726 | super(new Timer("topo-summary"), MAX_EVENTS, MAX_BATCH_MS, MAX_IDLE_MS); |
| 727 | } | 727 | } |
| 728 | 728 | ||
| 729 | @Override | 729 | @Override |
| 730 | - public void processEvents(List<Event> events) { | 730 | + public void processItems(List<Event> items) { |
| 731 | try { | 731 | try { |
| 732 | if (summaryEvent != null) { | 732 | if (summaryEvent != null) { |
| 733 | sendMessage(summmaryMessage(0)); | 733 | sendMessage(summmaryMessage(0)); | ... | ... |
-
Please register or login to post a comment