blob: e0d3b27fede08969c1179f075644c04407df8ee6 [file] [log] [blame]
Brian O'Connora468e902015-03-18 16:43:49 -07001/*
Ray Milkey34c95902015-04-15 09:47:53 -07002 * Copyright 2014-2015 Open Networking Laboratory
Brian O'Connora468e902015-03-18 16:43:49 -07003 *
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 */
16package org.onosproject.election;
17
18import static org.slf4j.LoggerFactory.getLogger;
19
20import org.apache.felix.scr.annotations.Activate;
21import org.apache.felix.scr.annotations.Component;
22import org.apache.felix.scr.annotations.Deactivate;
23import org.apache.felix.scr.annotations.Reference;
24import org.apache.felix.scr.annotations.ReferenceCardinality;
25import org.onosproject.cluster.ClusterService;
26import org.onosproject.core.CoreService;
Brian O'Connora468e902015-03-18 16:43:49 -070027import org.onosproject.cluster.LeadershipEvent;
28import org.onosproject.cluster.LeadershipEventListener;
29import org.onosproject.cluster.LeadershipService;
Madan Jampani620f70d2016-01-30 22:22:47 -080030import org.onosproject.cluster.NodeId;
Brian O'Connora468e902015-03-18 16:43:49 -070031import org.onosproject.core.ApplicationId;
Brian O'Connora468e902015-03-18 16:43:49 -070032import org.slf4j.Logger;
33
34
35/**
36 * Simple application to test leadership election.
37 */
38@Component(immediate = true)
39public class ElectionTest {
40
41 private final Logger log = getLogger(getClass());
42
43 private static final String ELECTION_APP = "org.onosproject.election";
44 private ApplicationId appId;
45
46 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
47 protected ClusterService clusterService;
48
49 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
50 protected CoreService coreService;
51
52 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
53 protected LeadershipService leadershipService;
54
55 private LeadershipEventListener leadershipEventListener =
56 new InnerLeadershipEventListener();
57
Madan Jampani620f70d2016-01-30 22:22:47 -080058 private NodeId localNodeId;
Brian O'Connora468e902015-03-18 16:43:49 -070059
60
61 @Activate
62 protected void activate() {
63 log.info("Election-test app started");
64
65 appId = coreService.registerApplication(ELECTION_APP);
66
Madan Jampani620f70d2016-01-30 22:22:47 -080067 localNodeId = clusterService.getLocalNode().id();
Brian O'Connora468e902015-03-18 16:43:49 -070068
69 leadershipService.addListener(leadershipEventListener);
Brian O'Connora468e902015-03-18 16:43:49 -070070 }
71
72 @Deactivate
73 protected void deactivate() {
74
75 leadershipService.withdraw(appId.name());
76 leadershipService.removeListener(leadershipEventListener);
77
78 log.info("Election-test app Stopped");
79 }
80
81 /**
82 * A listener for Leadership Events.
83 */
84 private class InnerLeadershipEventListener
85 implements LeadershipEventListener {
86
87 @Override
88 public void event(LeadershipEvent event) {
89
90
Ayaka Koshibee3bfcaf2015-04-21 14:29:58 -070091 if (event.type().equals(LeadershipEvent.Type.CANDIDATES_CHANGED)) {
92 return;
93 }
Brian O'Connora468e902015-03-18 16:43:49 -070094 if (!event.subject().topic().equals(appId.name())) {
95 return; // Not our topic: ignore
96 }
97
98 //only log what pertains to us
99 log.debug("Leadership Event: time = {} type = {} event = {}",
100 event.time(), event.type(), event);
101
Brian O'Connora468e902015-03-18 16:43:49 -0700102 switch (event.type()) {
Madan Jampani620f70d2016-01-30 22:22:47 -0800103 case LEADER_CHANGED:
104 case LEADER_AND_CANDIDATES_CHANGED:
105 log.info("Election-test app leader changed. New leadership: {}", event.subject());
Brian O'Connora468e902015-03-18 16:43:49 -0700106 break;
107 default:
108 break;
109 }
110 }
111 }
112
113}