tom

Enahnced topology and flow stores to extend general store.

1 package org.onlab.onos.net.flow; 1 package org.onlab.onos.net.flow;
2 2
3 import org.onlab.onos.net.DeviceId; 3 import org.onlab.onos.net.DeviceId;
4 +import org.onlab.onos.store.Store;
4 5
5 /** 6 /**
6 * Manages inventory of flow rules; not intended for direct use. 7 * Manages inventory of flow rules; not intended for direct use.
7 */ 8 */
8 -public interface FlowRuleStore { 9 +public interface FlowRuleStore extends Store<FlowRuleEvent, FlowRuleStoreDelegate> {
9 10
10 /** 11 /**
11 * Returns the flow entries associated with a device. 12 * Returns the flow entries associated with a device.
......
1 +package org.onlab.onos.net.flow;
2 +
3 +import org.onlab.onos.store.StoreDelegate;
4 +
5 +/**
6 + * Flow rule store delegate abstraction.
7 + */
8 +public interface FlowRuleStoreDelegate extends StoreDelegate<FlowRuleEvent> {
9 +}
...@@ -6,6 +6,7 @@ import org.onlab.onos.net.DeviceId; ...@@ -6,6 +6,7 @@ import org.onlab.onos.net.DeviceId;
6 import org.onlab.onos.net.Link; 6 import org.onlab.onos.net.Link;
7 import org.onlab.onos.net.Path; 7 import org.onlab.onos.net.Path;
8 import org.onlab.onos.net.provider.ProviderId; 8 import org.onlab.onos.net.provider.ProviderId;
9 +import org.onlab.onos.store.Store;
9 10
10 import java.util.List; 11 import java.util.List;
11 import java.util.Set; 12 import java.util.Set;
...@@ -13,7 +14,7 @@ import java.util.Set; ...@@ -13,7 +14,7 @@ import java.util.Set;
13 /** 14 /**
14 * Manages inventory of topology snapshots; not intended for direct use. 15 * Manages inventory of topology snapshots; not intended for direct use.
15 */ 16 */
16 -public interface TopologyStore { 17 +public interface TopologyStore extends Store<TopologyEvent, TopologyStoreDelegate> {
17 18
18 /** 19 /**
19 * Returns the current topology snapshot. 20 * Returns the current topology snapshot.
......
1 +package org.onlab.onos.net.topology;
2 +
3 +import org.onlab.onos.store.StoreDelegate;
4 +
5 +/**
6 + * Topology store delegate abstraction.
7 + */
8 +public interface TopologyStoreDelegate extends StoreDelegate<TopologyEvent> {
9 +}
...@@ -60,7 +60,7 @@ public class DeviceManager ...@@ -60,7 +60,7 @@ public class DeviceManager
60 60
61 private DeviceStoreDelegate delegate = new InternalStoreDelegate(); 61 private DeviceStoreDelegate delegate = new InternalStoreDelegate();
62 62
63 - private final MastershipListener mastershipListener = new InnerMastershipListener(); 63 + private final MastershipListener mastershipListener = new InternalMastershipListener();
64 64
65 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 65 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
66 protected DeviceStore store; 66 protected DeviceStore store;
...@@ -244,7 +244,7 @@ public class DeviceManager ...@@ -244,7 +244,7 @@ public class DeviceManager
244 } 244 }
245 245
246 // Intercepts mastership events 246 // Intercepts mastership events
247 - private class InnerMastershipListener implements MastershipListener { 247 + private class InternalMastershipListener implements MastershipListener {
248 @Override 248 @Override
249 public void event(MastershipEvent event) { 249 public void event(MastershipEvent event) {
250 // FIXME: for now we're taking action only on becoming master 250 // FIXME: for now we're taking action only on becoming master
......
...@@ -27,6 +27,8 @@ import org.onlab.onos.net.flow.FlowRuleProviderRegistry; ...@@ -27,6 +27,8 @@ import org.onlab.onos.net.flow.FlowRuleProviderRegistry;
27 import org.onlab.onos.net.flow.FlowRuleProviderService; 27 import org.onlab.onos.net.flow.FlowRuleProviderService;
28 import org.onlab.onos.net.flow.FlowRuleService; 28 import org.onlab.onos.net.flow.FlowRuleService;
29 import org.onlab.onos.net.flow.FlowRuleStore; 29 import org.onlab.onos.net.flow.FlowRuleStore;
30 +import org.onlab.onos.net.flow.FlowRuleStoreDelegate;
31 +import org.onlab.onos.net.host.HostStoreDelegate;
30 import org.onlab.onos.net.provider.AbstractProviderRegistry; 32 import org.onlab.onos.net.provider.AbstractProviderRegistry;
31 import org.onlab.onos.net.provider.AbstractProviderService; 33 import org.onlab.onos.net.provider.AbstractProviderService;
32 import org.slf4j.Logger; 34 import org.slf4j.Logger;
...@@ -48,6 +50,8 @@ implements FlowRuleService, FlowRuleProviderRegistry { ...@@ -48,6 +50,8 @@ implements FlowRuleService, FlowRuleProviderRegistry {
48 private final AbstractListenerRegistry<FlowRuleEvent, FlowRuleListener> 50 private final AbstractListenerRegistry<FlowRuleEvent, FlowRuleListener>
49 listenerRegistry = new AbstractListenerRegistry<>(); 51 listenerRegistry = new AbstractListenerRegistry<>();
50 52
53 + private FlowRuleStoreDelegate delegate = new InternalStoreDelegate();
54 +
51 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 55 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
52 protected FlowRuleStore store; 56 protected FlowRuleStore store;
53 57
...@@ -59,12 +63,14 @@ implements FlowRuleService, FlowRuleProviderRegistry { ...@@ -59,12 +63,14 @@ implements FlowRuleService, FlowRuleProviderRegistry {
59 63
60 @Activate 64 @Activate
61 public void activate() { 65 public void activate() {
66 + store.setDelegate(delegate);
62 eventDispatcher.addSink(FlowRuleEvent.class, listenerRegistry); 67 eventDispatcher.addSink(FlowRuleEvent.class, listenerRegistry);
63 log.info("Started"); 68 log.info("Started");
64 } 69 }
65 70
66 @Deactivate 71 @Deactivate
67 public void deactivate() { 72 public void deactivate() {
73 + store.unsetDelegate(delegate);
68 eventDispatcher.removeSink(FlowRuleEvent.class); 74 eventDispatcher.removeSink(FlowRuleEvent.class);
69 log.info("Stopped"); 75 log.info("Stopped");
70 } 76 }
...@@ -196,4 +202,11 @@ implements FlowRuleService, FlowRuleProviderRegistry { ...@@ -196,4 +202,11 @@ implements FlowRuleService, FlowRuleProviderRegistry {
196 } 202 }
197 } 203 }
198 204
205 + // Store delegate to re-post events emitted from the store.
206 + private class InternalStoreDelegate implements FlowRuleStoreDelegate {
207 + @Override
208 + public void notify(FlowRuleEvent event) {
209 + eventDispatcher.post(event);
210 + }
211 + }
199 } 212 }
......
1 package org.onlab.onos.net.host.impl; 1 package org.onlab.onos.net.host.impl;
2 2
3 -import static com.google.common.base.Preconditions.checkNotNull;
4 -import static org.slf4j.LoggerFactory.getLogger;
5 -
6 -import java.util.Set;
7 -
8 import org.apache.felix.scr.annotations.Activate; 3 import org.apache.felix.scr.annotations.Activate;
9 import org.apache.felix.scr.annotations.Component; 4 import org.apache.felix.scr.annotations.Component;
10 import org.apache.felix.scr.annotations.Deactivate; 5 import org.apache.felix.scr.annotations.Deactivate;
...@@ -26,6 +21,7 @@ import org.onlab.onos.net.host.HostProviderRegistry; ...@@ -26,6 +21,7 @@ import org.onlab.onos.net.host.HostProviderRegistry;
26 import org.onlab.onos.net.host.HostProviderService; 21 import org.onlab.onos.net.host.HostProviderService;
27 import org.onlab.onos.net.host.HostService; 22 import org.onlab.onos.net.host.HostService;
28 import org.onlab.onos.net.host.HostStore; 23 import org.onlab.onos.net.host.HostStore;
24 +import org.onlab.onos.net.host.HostStoreDelegate;
29 import org.onlab.onos.net.host.PortAddresses; 25 import org.onlab.onos.net.host.PortAddresses;
30 import org.onlab.onos.net.provider.AbstractProviderRegistry; 26 import org.onlab.onos.net.provider.AbstractProviderRegistry;
31 import org.onlab.onos.net.provider.AbstractProviderService; 27 import org.onlab.onos.net.provider.AbstractProviderService;
...@@ -35,6 +31,11 @@ import org.onlab.packet.MacAddress; ...@@ -35,6 +31,11 @@ import org.onlab.packet.MacAddress;
35 import org.onlab.packet.VlanId; 31 import org.onlab.packet.VlanId;
36 import org.slf4j.Logger; 32 import org.slf4j.Logger;
37 33
34 +import java.util.Set;
35 +
36 +import static com.google.common.base.Preconditions.checkNotNull;
37 +import static org.slf4j.LoggerFactory.getLogger;
38 +
38 /** 39 /**
39 * Provides basic implementation of the host SB &amp; NB APIs. 40 * Provides basic implementation of the host SB &amp; NB APIs.
40 */ 41 */
...@@ -50,6 +51,8 @@ public class HostManager ...@@ -50,6 +51,8 @@ public class HostManager
50 private final AbstractListenerRegistry<HostEvent, HostListener> 51 private final AbstractListenerRegistry<HostEvent, HostListener>
51 listenerRegistry = new AbstractListenerRegistry<>(); 52 listenerRegistry = new AbstractListenerRegistry<>();
52 53
54 + private HostStoreDelegate delegate = new InternalStoreDelegate();
55 +
53 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 56 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
54 protected HostStore store; 57 protected HostStore store;
55 58
...@@ -59,12 +62,14 @@ public class HostManager ...@@ -59,12 +62,14 @@ public class HostManager
59 62
60 @Activate 63 @Activate
61 public void activate() { 64 public void activate() {
65 + store.setDelegate(delegate);
62 eventDispatcher.addSink(HostEvent.class, listenerRegistry); 66 eventDispatcher.addSink(HostEvent.class, listenerRegistry);
63 log.info("Started"); 67 log.info("Started");
64 } 68 }
65 69
66 @Deactivate 70 @Deactivate
67 public void deactivate() { 71 public void deactivate() {
72 + store.unsetDelegate(delegate);
68 eventDispatcher.removeSink(HostEvent.class); 73 eventDispatcher.removeSink(HostEvent.class);
69 log.info("Stopped"); 74 log.info("Stopped");
70 } 75 }
...@@ -219,4 +224,11 @@ public class HostManager ...@@ -219,4 +224,11 @@ public class HostManager
219 } 224 }
220 } 225 }
221 226
227 + // Store delegate to re-post events emitted from the store.
228 + private class InternalStoreDelegate implements HostStoreDelegate {
229 + @Override
230 + public void notify(HostEvent event) {
231 + post(event);
232 + }
233 + }
222 } 234 }
......
...@@ -28,6 +28,7 @@ import org.onlab.onos.net.link.LinkProviderRegistry; ...@@ -28,6 +28,7 @@ import org.onlab.onos.net.link.LinkProviderRegistry;
28 import org.onlab.onos.net.link.LinkProviderService; 28 import org.onlab.onos.net.link.LinkProviderService;
29 import org.onlab.onos.net.link.LinkService; 29 import org.onlab.onos.net.link.LinkService;
30 import org.onlab.onos.net.link.LinkStore; 30 import org.onlab.onos.net.link.LinkStore;
31 +import org.onlab.onos.net.link.LinkStoreDelegate;
31 import org.onlab.onos.net.provider.AbstractProviderRegistry; 32 import org.onlab.onos.net.provider.AbstractProviderRegistry;
32 import org.onlab.onos.net.provider.AbstractProviderService; 33 import org.onlab.onos.net.provider.AbstractProviderService;
33 import org.slf4j.Logger; 34 import org.slf4j.Logger;
...@@ -52,7 +53,9 @@ public class LinkManager ...@@ -52,7 +53,9 @@ public class LinkManager
52 protected final AbstractListenerRegistry<LinkEvent, LinkListener> 53 protected final AbstractListenerRegistry<LinkEvent, LinkListener>
53 listenerRegistry = new AbstractListenerRegistry<>(); 54 listenerRegistry = new AbstractListenerRegistry<>();
54 55
55 - private final DeviceListener deviceListener = new InnerDeviceListener(); 56 + private LinkStoreDelegate delegate = new InternalStoreDelegate();
57 +
58 + private final DeviceListener deviceListener = new InternalDeviceListener();
56 59
57 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 60 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
58 protected LinkStore store; 61 protected LinkStore store;
...@@ -65,6 +68,7 @@ public class LinkManager ...@@ -65,6 +68,7 @@ public class LinkManager
65 68
66 @Activate 69 @Activate
67 public void activate() { 70 public void activate() {
71 + store.setDelegate(delegate);
68 eventDispatcher.addSink(LinkEvent.class, listenerRegistry); 72 eventDispatcher.addSink(LinkEvent.class, listenerRegistry);
69 deviceService.addListener(deviceListener); 73 deviceService.addListener(deviceListener);
70 log.info("Started"); 74 log.info("Started");
...@@ -72,6 +76,7 @@ public class LinkManager ...@@ -72,6 +76,7 @@ public class LinkManager
72 76
73 @Deactivate 77 @Deactivate
74 public void deactivate() { 78 public void deactivate() {
79 + store.unsetDelegate(delegate);
75 eventDispatcher.removeSink(LinkEvent.class); 80 eventDispatcher.removeSink(LinkEvent.class);
76 deviceService.removeListener(deviceListener); 81 deviceService.removeListener(deviceListener);
77 log.info("Stopped"); 82 log.info("Stopped");
...@@ -154,7 +159,7 @@ public class LinkManager ...@@ -154,7 +159,7 @@ public class LinkManager
154 159
155 // Auxiliary interceptor for device remove events to prune links that 160 // Auxiliary interceptor for device remove events to prune links that
156 // are associated with the removed device or its port. 161 // are associated with the removed device or its port.
157 - private class InnerDeviceListener implements DeviceListener { 162 + private class InternalDeviceListener implements DeviceListener {
158 @Override 163 @Override
159 public void event(DeviceEvent event) { 164 public void event(DeviceEvent event) {
160 if (event.type() == DeviceEvent.Type.DEVICE_REMOVED) { 165 if (event.type() == DeviceEvent.Type.DEVICE_REMOVED) {
...@@ -236,4 +241,11 @@ public class LinkManager ...@@ -236,4 +241,11 @@ public class LinkManager
236 } 241 }
237 } 242 }
238 243
244 + // Store delegate to re-post events emitted from the store.
245 + private class InternalStoreDelegate implements LinkStoreDelegate {
246 + @Override
247 + public void notify(LinkEvent event) {
248 + post(event);
249 + }
250 + }
239 } 251 }
......
...@@ -28,6 +28,7 @@ import org.onlab.onos.net.topology.TopologyProviderRegistry; ...@@ -28,6 +28,7 @@ import org.onlab.onos.net.topology.TopologyProviderRegistry;
28 import org.onlab.onos.net.topology.TopologyProviderService; 28 import org.onlab.onos.net.topology.TopologyProviderService;
29 import org.onlab.onos.net.topology.TopologyService; 29 import org.onlab.onos.net.topology.TopologyService;
30 import org.onlab.onos.net.topology.TopologyStore; 30 import org.onlab.onos.net.topology.TopologyStore;
31 +import org.onlab.onos.net.topology.TopologyStoreDelegate;
31 import org.slf4j.Logger; 32 import org.slf4j.Logger;
32 33
33 import java.util.List; 34 import java.util.List;
...@@ -56,6 +57,8 @@ public class TopologyManager ...@@ -56,6 +57,8 @@ public class TopologyManager
56 private final AbstractListenerRegistry<TopologyEvent, TopologyListener> 57 private final AbstractListenerRegistry<TopologyEvent, TopologyListener>
57 listenerRegistry = new AbstractListenerRegistry<>(); 58 listenerRegistry = new AbstractListenerRegistry<>();
58 59
60 + private TopologyStoreDelegate delegate = new InternalStoreDelegate();
61 +
59 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) 62 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 protected TopologyStore store; 63 protected TopologyStore store;
61 64
...@@ -65,12 +68,14 @@ public class TopologyManager ...@@ -65,12 +68,14 @@ public class TopologyManager
65 68
66 @Activate 69 @Activate
67 public void activate() { 70 public void activate() {
71 + store.setDelegate(delegate);
68 eventDispatcher.addSink(TopologyEvent.class, listenerRegistry); 72 eventDispatcher.addSink(TopologyEvent.class, listenerRegistry);
69 log.info("Started"); 73 log.info("Started");
70 } 74 }
71 75
72 @Deactivate 76 @Deactivate
73 public void deactivate() { 77 public void deactivate() {
78 + store.unsetDelegate(delegate);
74 eventDispatcher.removeSink(TopologyEvent.class); 79 eventDispatcher.removeSink(TopologyEvent.class);
75 log.info("Stopped"); 80 log.info("Stopped");
76 } 81 }
...@@ -188,4 +193,11 @@ public class TopologyManager ...@@ -188,4 +193,11 @@ public class TopologyManager
188 } 193 }
189 } 194 }
190 195
196 + // Store delegate to re-post events emitted from the store.
197 + private class InternalStoreDelegate implements TopologyStoreDelegate {
198 + @Override
199 + public void notify(TopologyEvent event) {
200 + eventDispatcher.post(event);
201 + }
202 + }
191 } 203 }
......
...@@ -13,6 +13,8 @@ import org.onlab.onos.net.flow.FlowRule; ...@@ -13,6 +13,8 @@ import org.onlab.onos.net.flow.FlowRule;
13 import org.onlab.onos.net.flow.FlowRuleEvent; 13 import org.onlab.onos.net.flow.FlowRuleEvent;
14 import org.onlab.onos.net.flow.FlowRuleEvent.Type; 14 import org.onlab.onos.net.flow.FlowRuleEvent.Type;
15 import org.onlab.onos.net.flow.FlowRuleStore; 15 import org.onlab.onos.net.flow.FlowRuleStore;
16 +import org.onlab.onos.net.flow.FlowRuleStoreDelegate;
17 +import org.onlab.onos.store.AbstractStore;
16 import org.slf4j.Logger; 18 import org.slf4j.Logger;
17 19
18 import com.google.common.collect.ArrayListMultimap; 20 import com.google.common.collect.ArrayListMultimap;
...@@ -24,7 +26,9 @@ import com.google.common.collect.Multimap; ...@@ -24,7 +26,9 @@ import com.google.common.collect.Multimap;
24 */ 26 */
25 @Component(immediate = true) 27 @Component(immediate = true)
26 @Service 28 @Service
27 -public class SimpleFlowRuleStore implements FlowRuleStore { 29 +public class SimpleFlowRuleStore
30 + extends AbstractStore<FlowRuleEvent, FlowRuleStoreDelegate>
31 + implements FlowRuleStore {
28 32
29 private final Logger log = getLogger(getClass()); 33 private final Logger log = getLogger(getClass());
30 34
......
...@@ -18,6 +18,8 @@ import org.onlab.onos.net.topology.TopologyCluster; ...@@ -18,6 +18,8 @@ import org.onlab.onos.net.topology.TopologyCluster;
18 import org.onlab.onos.net.topology.TopologyEvent; 18 import org.onlab.onos.net.topology.TopologyEvent;
19 import org.onlab.onos.net.topology.TopologyGraph; 19 import org.onlab.onos.net.topology.TopologyGraph;
20 import org.onlab.onos.net.topology.TopologyStore; 20 import org.onlab.onos.net.topology.TopologyStore;
21 +import org.onlab.onos.net.topology.TopologyStoreDelegate;
22 +import org.onlab.onos.store.AbstractStore;
21 import org.slf4j.Logger; 23 import org.slf4j.Logger;
22 24
23 import java.util.List; 25 import java.util.List;
...@@ -31,7 +33,9 @@ import static org.slf4j.LoggerFactory.getLogger; ...@@ -31,7 +33,9 @@ import static org.slf4j.LoggerFactory.getLogger;
31 */ 33 */
32 @Component(immediate = true) 34 @Component(immediate = true)
33 @Service 35 @Service
34 -public class SimpleTopologyStore implements TopologyStore { 36 +public class SimpleTopologyStore
37 + extends AbstractStore<TopologyEvent, TopologyStoreDelegate>
38 + implements TopologyStore {
35 39
36 private final Logger log = getLogger(getClass()); 40 private final Logger log = getLogger(getClass());
37 41
......