blob: b7464c2ae61ddd8960e6e5197dea0b1bdf88f30d [file] [log] [blame]
Madan Jampani9e1a8c12016-06-27 11:19:10 -07001package org.onosproject.distributedprimitives.cli;
2
3import org.apache.karaf.shell.commands.Argument;
4import org.apache.karaf.shell.commands.Command;
5import org.onosproject.cli.AbstractShellCommand;
6import org.onosproject.cluster.ClusterService;
7import org.onosproject.cluster.Leadership;
8import org.onosproject.cluster.NodeId;
9import org.onosproject.store.service.LeaderElector;
10import org.onosproject.store.service.StorageService;
11
12import com.google.common.base.Joiner;
13
14@Command(scope = "onos", name = "leader-test",
15description = "LeaderElector test cli fixture")
16public class LeaderElectorTestCommand extends AbstractShellCommand {
17 @Argument(index = 0, name = "name",
18 description = "leader elector name",
19 required = true, multiValued = false)
20 String name = null;
21
22 @Argument(index = 1, name = "operation",
23 description = "operation",
24 required = true, multiValued = false)
25 String operation = null;
26
27
28 @Argument(index = 2, name = "topic",
29 description = "topic name",
30 required = false, multiValued = false)
31 String topic = null;
32
33 LeaderElector leaderElector;
34
35 @Override
36 protected void execute() {
37 StorageService storageService = get(StorageService.class);
38 ClusterService clusterService = get(ClusterService.class);
39 NodeId localNodeId = clusterService.getLocalNode().id();
40 leaderElector = storageService.leaderElectorBuilder()
41 .withName(name)
42 .build()
43 .asLeaderElector();
44 if (operation.equals("run")) {
45 print(leaderElector.run(topic, localNodeId));
46 } else if (operation.equals("withdraw")) {
47 leaderElector.withdraw(topic);
48 } else if (operation.equals("show")) {
49 print(leaderElector.getLeadership(topic));
50 }
51 }
52
53 private void print(Leadership leadership) {
54 if (leadership.leader() != null) {
55 print("leader=%s#term=%d#candidates=%s",
56 leadership.leaderNodeId(),
57 leadership.leader().term(),
58 leadership.candidates().isEmpty() ? "none" : Joiner.on(",").join(leadership.candidates()));
59 } else {
60 print("leader=none#candidates=%s",
61 leadership.candidates().isEmpty() ? "none" : Joiner.on(",").join(leadership.candidates()));
62 }
63 }
64}