blob: d0cc949d41b8f4d829ec0ad7cb21c8d791b15dfc [file] [log] [blame]
tome4729872014-09-23 00:37:37 -07001package org.onlab.onos.cluster.impl;
2
3import org.apache.felix.scr.annotations.Activate;
4import org.apache.felix.scr.annotations.Component;
5import org.apache.felix.scr.annotations.Deactivate;
6import org.apache.felix.scr.annotations.Reference;
7import org.apache.felix.scr.annotations.ReferenceCardinality;
8import org.apache.felix.scr.annotations.Service;
tomb41d1ac2014-09-24 01:51:24 -07009import org.onlab.onos.cluster.ClusterAdminService;
tome4729872014-09-23 00:37:37 -070010import org.onlab.onos.cluster.ClusterEvent;
11import org.onlab.onos.cluster.ClusterEventListener;
12import org.onlab.onos.cluster.ClusterService;
13import org.onlab.onos.cluster.ClusterStore;
tom0755a362014-09-24 11:54:43 -070014import org.onlab.onos.cluster.ClusterStoreDelegate;
tome4729872014-09-23 00:37:37 -070015import org.onlab.onos.cluster.ControllerNode;
16import org.onlab.onos.cluster.NodeId;
17import org.onlab.onos.event.AbstractListenerRegistry;
18import org.onlab.onos.event.EventDeliveryService;
19import org.slf4j.Logger;
20
21import java.util.Set;
22
23import static com.google.common.base.Preconditions.checkNotNull;
24import static org.slf4j.LoggerFactory.getLogger;
25
26/**
27 * Implementation of the cluster service.
28 */
29@Component(immediate = true)
30@Service
tomb41d1ac2014-09-24 01:51:24 -070031public class ClusterManager implements ClusterService, ClusterAdminService {
tome4729872014-09-23 00:37:37 -070032
33 public static final String INSTANCE_ID_NULL = "Instance ID cannot be null";
34 private final Logger log = getLogger(getClass());
35
tom0755a362014-09-24 11:54:43 -070036 private ClusterStoreDelegate delegate = new InternalStoreDelegate();
37
tome4729872014-09-23 00:37:37 -070038 protected final AbstractListenerRegistry<ClusterEvent, ClusterEventListener>
39 listenerRegistry = new AbstractListenerRegistry<>();
40
41 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
42 protected ClusterStore store;
43
44 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
45 protected EventDeliveryService eventDispatcher;
46
47 @Activate
48 public void activate() {
tom0755a362014-09-24 11:54:43 -070049 store.setDelegate(delegate);
tome4729872014-09-23 00:37:37 -070050 eventDispatcher.addSink(ClusterEvent.class, listenerRegistry);
51 log.info("Started");
52 }
53
54 @Deactivate
55 public void deactivate() {
56 eventDispatcher.removeSink(ClusterEvent.class);
57 log.info("Stopped");
58 }
59
60 @Override
61 public ControllerNode getLocalNode() {
62 return store.getLocalNode();
63 }
64
65 @Override
66 public Set<ControllerNode> getNodes() {
67 return store.getNodes();
68 }
69
70 @Override
71 public ControllerNode getNode(NodeId nodeId) {
72 checkNotNull(nodeId, INSTANCE_ID_NULL);
73 return store.getNode(nodeId);
74 }
75
76 @Override
77 public ControllerNode.State getState(NodeId nodeId) {
78 checkNotNull(nodeId, INSTANCE_ID_NULL);
79 return store.getState(nodeId);
80 }
81
82 @Override
tomb41d1ac2014-09-24 01:51:24 -070083 public void removeNode(NodeId nodeId) {
84 checkNotNull(nodeId, INSTANCE_ID_NULL);
85 store.removeNode(nodeId);
86 }
87
88 @Override
tome4729872014-09-23 00:37:37 -070089 public void addListener(ClusterEventListener listener) {
90 listenerRegistry.addListener(listener);
91 }
92
93 @Override
94 public void removeListener(ClusterEventListener listener) {
95 listenerRegistry.removeListener(listener);
96 }
tom0755a362014-09-24 11:54:43 -070097
98 // Store delegate to re-post events emitted from the store.
99 private class InternalStoreDelegate implements ClusterStoreDelegate {
100 @Override
101 public void notify(ClusterEvent event) {
102 checkNotNull(event, "Event cannot be null");
103 eventDispatcher.post(event);
104 }
105 }
tome4729872014-09-23 00:37:37 -0700106}