Added accumulation of events using the accumulator construct.
Change-Id: I020fc7a46427636f4ec934f1895402625af04788
Showing
1 changed file
with
32 additions
and
2 deletions
... | @@ -23,6 +23,9 @@ import org.apache.felix.scr.annotations.Deactivate; | ... | @@ -23,6 +23,9 @@ import org.apache.felix.scr.annotations.Deactivate; |
23 | import org.apache.felix.scr.annotations.Reference; | 23 | import org.apache.felix.scr.annotations.Reference; |
24 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 24 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
25 | import org.apache.felix.scr.annotations.Service; | 25 | import org.apache.felix.scr.annotations.Service; |
26 | +import org.onlab.util.AbstractAccumulator; | ||
27 | +import org.onlab.util.Accumulator; | ||
28 | +import org.onlab.util.SharedExecutors; | ||
26 | import org.onosproject.cfg.ComponentConfigEvent; | 29 | import org.onosproject.cfg.ComponentConfigEvent; |
27 | import org.onosproject.cfg.ComponentConfigService; | 30 | import org.onosproject.cfg.ComponentConfigService; |
28 | import org.onosproject.cfg.ComponentConfigStore; | 31 | import org.onosproject.cfg.ComponentConfigStore; |
... | @@ -37,7 +40,9 @@ import java.io.IOException; | ... | @@ -37,7 +40,9 @@ import java.io.IOException; |
37 | import java.io.InputStream; | 40 | import java.io.InputStream; |
38 | import java.util.Dictionary; | 41 | import java.util.Dictionary; |
39 | import java.util.Enumeration; | 42 | import java.util.Enumeration; |
43 | +import java.util.HashSet; | ||
40 | import java.util.Hashtable; | 44 | import java.util.Hashtable; |
45 | +import java.util.List; | ||
41 | import java.util.Map; | 46 | import java.util.Map; |
42 | import java.util.Set; | 47 | import java.util.Set; |
43 | 48 | ||
... | @@ -57,11 +62,19 @@ public class ComponentConfigManager implements ComponentConfigService { | ... | @@ -57,11 +62,19 @@ public class ComponentConfigManager implements ComponentConfigService { |
57 | private static final String COMPONENT_NULL = "Component name cannot be null"; | 62 | private static final String COMPONENT_NULL = "Component name cannot be null"; |
58 | private static final String PROPERTY_NULL = "Property name cannot be null"; | 63 | private static final String PROPERTY_NULL = "Property name cannot be null"; |
59 | 64 | ||
65 | + //Symbolic constants for use with the accumulator | ||
66 | + private static final int MAX_ITEMS = 100; | ||
67 | + private static final int MAX_BATCH_MILLIS = 1000; | ||
68 | + private static final int MAX_IDLE_MILLIS = 250; | ||
69 | + | ||
60 | private static final String RESOURCE_EXT = ".cfgdef"; | 70 | private static final String RESOURCE_EXT = ".cfgdef"; |
61 | 71 | ||
62 | private final Logger log = getLogger(getClass()); | 72 | private final Logger log = getLogger(getClass()); |
63 | 73 | ||
64 | private final ComponentConfigStoreDelegate delegate = new InternalStoreDelegate(); | 74 | private final ComponentConfigStoreDelegate delegate = new InternalStoreDelegate(); |
75 | + //TODO make accumulator properties configurable | ||
76 | + private final InternalAccumulator accumulator = new InternalAccumulator(SharedExecutors.getTimer(), | ||
77 | + MAX_ITEMS, MAX_BATCH_MILLIS, MAX_IDLE_MILLIS); | ||
65 | 78 | ||
66 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 79 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
67 | protected ComponentConfigStore store; | 80 | protected ComponentConfigStore store; |
... | @@ -73,6 +86,7 @@ public class ComponentConfigManager implements ComponentConfigService { | ... | @@ -73,6 +86,7 @@ public class ComponentConfigManager implements ComponentConfigService { |
73 | private final Map<String, Map<String, ConfigProperty>> properties = | 86 | private final Map<String, Map<String, ConfigProperty>> properties = |
74 | Maps.newConcurrentMap(); | 87 | Maps.newConcurrentMap(); |
75 | 88 | ||
89 | + | ||
76 | @Activate | 90 | @Activate |
77 | public void activate() { | 91 | public void activate() { |
78 | store.setDelegate(delegate); | 92 | store.setDelegate(delegate); |
... | @@ -181,6 +195,22 @@ public class ComponentConfigManager implements ComponentConfigService { | ... | @@ -181,6 +195,22 @@ public class ComponentConfigManager implements ComponentConfigService { |
181 | } | 195 | } |
182 | } | 196 | } |
183 | 197 | ||
198 | + private class InternalAccumulator extends AbstractAccumulator<String> implements Accumulator<String> { | ||
199 | + | ||
200 | + protected InternalAccumulator(java.util.Timer timer, int maxItems, int maxBatchMillis, int maxIdleMillis) { | ||
201 | + super(timer, maxItems, maxBatchMillis, maxIdleMillis); | ||
202 | + } | ||
203 | + | ||
204 | + @Override | ||
205 | + public void processItems(List items) { | ||
206 | + //Conversion to hashset removes duplicates | ||
207 | + Set<String> componentSet = new HashSet<String>(items); | ||
208 | + componentSet.forEach(ComponentConfigManager.this::triggerUpdate); | ||
209 | + | ||
210 | + | ||
211 | + } | ||
212 | + } | ||
213 | + | ||
184 | // Locates the property in the component map and replaces it with an | 214 | // Locates the property in the component map and replaces it with an |
185 | // updated copy. | 215 | // updated copy. |
186 | private void set(String componentName, String name, String value) { | 216 | private void set(String componentName, String name, String value) { |
... | @@ -189,7 +219,7 @@ public class ComponentConfigManager implements ComponentConfigService { | ... | @@ -189,7 +219,7 @@ public class ComponentConfigManager implements ComponentConfigService { |
189 | ConfigProperty prop = map.get(name); | 219 | ConfigProperty prop = map.get(name); |
190 | if (prop != null) { | 220 | if (prop != null) { |
191 | map.put(name, ConfigProperty.setProperty(prop, value)); | 221 | map.put(name, ConfigProperty.setProperty(prop, value)); |
192 | - triggerUpdate(componentName); | 222 | + accumulator.add(componentName); |
193 | return; | 223 | return; |
194 | } | 224 | } |
195 | } | 225 | } |
... | @@ -205,7 +235,7 @@ public class ComponentConfigManager implements ComponentConfigService { | ... | @@ -205,7 +235,7 @@ public class ComponentConfigManager implements ComponentConfigService { |
205 | ConfigProperty prop = map.get(name); | 235 | ConfigProperty prop = map.get(name); |
206 | if (prop != null) { | 236 | if (prop != null) { |
207 | map.put(name, ConfigProperty.resetProperty(prop)); | 237 | map.put(name, ConfigProperty.resetProperty(prop)); |
208 | - triggerUpdate(componentName); | 238 | + accumulator.add(componentName); |
209 | return; | 239 | return; |
210 | } | 240 | } |
211 | log.warn("Unable to reset non-existent property {} for component {}", | 241 | log.warn("Unable to reset non-existent property {} for component {}", | ... | ... |
-
Please register or login to post a comment