blob: aa21283cf57697ee15610314488e3c1df28459b1 [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;
14import org.onlab.onos.cluster.ControllerNode;
15import org.onlab.onos.cluster.NodeId;
16import org.onlab.onos.event.AbstractListenerRegistry;
17import org.onlab.onos.event.EventDeliveryService;
18import org.slf4j.Logger;
19
20import java.util.Set;
21
22import static com.google.common.base.Preconditions.checkNotNull;
23import static org.slf4j.LoggerFactory.getLogger;
24
25/**
26 * Implementation of the cluster service.
27 */
28@Component(immediate = true)
29@Service
tomb41d1ac2014-09-24 01:51:24 -070030public class ClusterManager implements ClusterService, ClusterAdminService {
tome4729872014-09-23 00:37:37 -070031
32 public static final String INSTANCE_ID_NULL = "Instance ID cannot be null";
33 private final Logger log = getLogger(getClass());
34
35 protected final AbstractListenerRegistry<ClusterEvent, ClusterEventListener>
36 listenerRegistry = new AbstractListenerRegistry<>();
37
38 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
39 protected ClusterStore store;
40
41 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
42 protected EventDeliveryService eventDispatcher;
43
44 @Activate
45 public void activate() {
46 eventDispatcher.addSink(ClusterEvent.class, listenerRegistry);
47 log.info("Started");
48 }
49
50 @Deactivate
51 public void deactivate() {
52 eventDispatcher.removeSink(ClusterEvent.class);
53 log.info("Stopped");
54 }
55
56 @Override
57 public ControllerNode getLocalNode() {
58 return store.getLocalNode();
59 }
60
61 @Override
62 public Set<ControllerNode> getNodes() {
63 return store.getNodes();
64 }
65
66 @Override
67 public ControllerNode getNode(NodeId nodeId) {
68 checkNotNull(nodeId, INSTANCE_ID_NULL);
69 return store.getNode(nodeId);
70 }
71
72 @Override
73 public ControllerNode.State getState(NodeId nodeId) {
74 checkNotNull(nodeId, INSTANCE_ID_NULL);
75 return store.getState(nodeId);
76 }
77
78 @Override
tomb41d1ac2014-09-24 01:51:24 -070079 public void removeNode(NodeId nodeId) {
80 checkNotNull(nodeId, INSTANCE_ID_NULL);
81 store.removeNode(nodeId);
82 }
83
84 @Override
tome4729872014-09-23 00:37:37 -070085 public void addListener(ClusterEventListener listener) {
86 listenerRegistry.addListener(listener);
87 }
88
89 @Override
90 public void removeListener(ClusterEventListener listener) {
91 listenerRegistry.removeListener(listener);
92 }
93}