Committed by
Gerrit Code Review
Added couple of methods to LeadershipService.
Change-Id: I259b1a282a51af9425e941a720336f89d66f1097
Showing
5 changed files
with
82 additions
and
2 deletions
... | @@ -16,6 +16,7 @@ | ... | @@ -16,6 +16,7 @@ |
16 | package org.onosproject.cluster; | 16 | package org.onosproject.cluster; |
17 | 17 | ||
18 | import java.util.Map; | 18 | import java.util.Map; |
19 | +import java.util.Set; | ||
19 | 20 | ||
20 | /** | 21 | /** |
21 | * Service for leader election. | 22 | * Service for leader election. |
... | @@ -27,13 +28,27 @@ import java.util.Map; | ... | @@ -27,13 +28,27 @@ import java.util.Map; |
27 | public interface LeadershipService { | 28 | public interface LeadershipService { |
28 | 29 | ||
29 | /** | 30 | /** |
30 | - * Gets the most recent leader for the topic. | 31 | + * Returns the current leader for the topic. |
31 | * @param path topic | 32 | * @param path topic |
32 | * @return nodeId of the leader, null if so such topic exists. | 33 | * @return nodeId of the leader, null if so such topic exists. |
33 | */ | 34 | */ |
34 | NodeId getLeader(String path); | 35 | NodeId getLeader(String path); |
35 | 36 | ||
36 | /** | 37 | /** |
38 | + * Returns the current leadership info for the topic. | ||
39 | + * @param path topic | ||
40 | + * @return leadership info or null if so such topic exists. | ||
41 | + */ | ||
42 | + Leadership getLeadership(String path); | ||
43 | + | ||
44 | + /** | ||
45 | + * Returns the set of topics owned by the specified node. | ||
46 | + * @param nodeId node Id. | ||
47 | + * @return set of topics for which this node is the current leader. | ||
48 | + */ | ||
49 | + Set<String> ownedTopics(NodeId nodeId); | ||
50 | + | ||
51 | + /** | ||
37 | * Joins the leadership contest. | 52 | * Joins the leadership contest. |
38 | * @param path topic for which this controller node wishes to be a leader. | 53 | * @param path topic for which this controller node wishes to be a leader. |
39 | */ | 54 | */ |
... | @@ -45,6 +60,10 @@ public interface LeadershipService { | ... | @@ -45,6 +60,10 @@ public interface LeadershipService { |
45 | */ | 60 | */ |
46 | void withdraw(String path); | 61 | void withdraw(String path); |
47 | 62 | ||
63 | + /** | ||
64 | + * Returns the current leader board. | ||
65 | + * @return mapping from topic to leadership info. | ||
66 | + */ | ||
48 | Map<String, Leadership> getLeaderBoard(); | 67 | Map<String, Leadership> getLeaderBoard(); |
49 | 68 | ||
50 | /** | 69 | /** | ... | ... |
... | @@ -46,10 +46,12 @@ import org.slf4j.LoggerFactory; | ... | @@ -46,10 +46,12 @@ import org.slf4j.LoggerFactory; |
46 | 46 | ||
47 | import java.util.HashMap; | 47 | import java.util.HashMap; |
48 | import java.util.Map; | 48 | import java.util.Map; |
49 | +import java.util.Set; | ||
49 | import java.util.concurrent.ExecutorService; | 50 | import java.util.concurrent.ExecutorService; |
50 | import java.util.concurrent.Executors; | 51 | import java.util.concurrent.Executors; |
51 | import java.util.concurrent.Future; | 52 | import java.util.concurrent.Future; |
52 | import java.util.concurrent.locks.Lock; | 53 | import java.util.concurrent.locks.Lock; |
54 | +import java.util.stream.Collectors; | ||
53 | 55 | ||
54 | import static com.google.common.base.Preconditions.checkArgument; | 56 | import static com.google.common.base.Preconditions.checkArgument; |
55 | import static org.onlab.util.Tools.groupedThreads; | 57 | import static org.onlab.util.Tools.groupedThreads; |
... | @@ -162,6 +164,28 @@ public class HazelcastLeadershipService implements LeadershipService { | ... | @@ -162,6 +164,28 @@ public class HazelcastLeadershipService implements LeadershipService { |
162 | } | 164 | } |
163 | 165 | ||
164 | @Override | 166 | @Override |
167 | + public Leadership getLeadership(String path) { | ||
168 | + checkArgument(path != null); | ||
169 | + Topic topic = topics.get(path); | ||
170 | + if (topic != null) { | ||
171 | + return new Leadership(topic.topicName(), | ||
172 | + topic.leader(), | ||
173 | + topic.term()); | ||
174 | + } | ||
175 | + return null; | ||
176 | + } | ||
177 | + | ||
178 | + @Override | ||
179 | + public Set<String> ownedTopics(NodeId nodeId) { | ||
180 | + checkArgument(nodeId != null); | ||
181 | + return topics.values() | ||
182 | + .stream() | ||
183 | + .filter(topic -> nodeId.equals(topic.leader())) | ||
184 | + .map(topic -> topic.topicName) | ||
185 | + .collect(Collectors.toSet()); | ||
186 | + } | ||
187 | + | ||
188 | + @Override | ||
165 | public void runForLeadership(String path) { | 189 | public void runForLeadership(String path) { |
166 | checkArgument(path != null); | 190 | checkArgument(path != null); |
167 | Topic topic = new Topic(path); | 191 | Topic topic = new Topic(path); | ... | ... |
core/store/dist/src/main/java/org/onosproject/store/cluster/impl/LeadershipManager.java
deleted
100644 → 0
This diff is collapsed. Click to expand it.
... | @@ -2,6 +2,7 @@ package org.onosproject.store.consistent.impl; | ... | @@ -2,6 +2,7 @@ package org.onosproject.store.consistent.impl; |
2 | 2 | ||
3 | import static org.onlab.util.Tools.groupedThreads; | 3 | import static org.onlab.util.Tools.groupedThreads; |
4 | import static org.slf4j.LoggerFactory.getLogger; | 4 | import static org.slf4j.LoggerFactory.getLogger; |
5 | +import static com.google.common.base.Preconditions.checkArgument; | ||
5 | 6 | ||
6 | import java.util.Map; | 7 | import java.util.Map; |
7 | import java.util.Map.Entry; | 8 | import java.util.Map.Entry; |
... | @@ -10,6 +11,7 @@ import java.util.concurrent.ExecutorService; | ... | @@ -10,6 +11,7 @@ import java.util.concurrent.ExecutorService; |
10 | import java.util.concurrent.Executors; | 11 | import java.util.concurrent.Executors; |
11 | import java.util.concurrent.ScheduledExecutorService; | 12 | import java.util.concurrent.ScheduledExecutorService; |
12 | import java.util.concurrent.TimeUnit; | 13 | import java.util.concurrent.TimeUnit; |
14 | +import java.util.stream.Collectors; | ||
13 | 15 | ||
14 | import org.apache.felix.scr.annotations.Activate; | 16 | import org.apache.felix.scr.annotations.Activate; |
15 | import org.apache.felix.scr.annotations.Component; | 17 | import org.apache.felix.scr.annotations.Component; |
... | @@ -171,6 +173,22 @@ public class DistributedLeadershipManager implements LeadershipService { | ... | @@ -171,6 +173,22 @@ public class DistributedLeadershipManager implements LeadershipService { |
171 | } | 173 | } |
172 | 174 | ||
173 | @Override | 175 | @Override |
176 | + public Leadership getLeadership(String path) { | ||
177 | + checkArgument(path != null); | ||
178 | + return leaderBoard.get(path); | ||
179 | + } | ||
180 | + | ||
181 | + @Override | ||
182 | + public Set<String> ownedTopics(NodeId nodeId) { | ||
183 | + checkArgument(nodeId != null); | ||
184 | + return leaderBoard.entrySet() | ||
185 | + .stream() | ||
186 | + .filter(entry -> nodeId.equals(entry.getValue().leader())) | ||
187 | + .map(Entry::getKey) | ||
188 | + .collect(Collectors.toSet()); | ||
189 | + } | ||
190 | + | ||
191 | + @Override | ||
174 | public void runForLeadership(String path) { | 192 | public void runForLeadership(String path) { |
175 | log.info("Running for leadership for topic: {}", path); | 193 | log.info("Running for leadership for topic: {}", path); |
176 | activeTopics.add(path); | 194 | activeTopics.add(path); | ... | ... |
... | @@ -15,10 +15,14 @@ | ... | @@ -15,10 +15,14 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.store.trivial.impl; | 16 | package org.onosproject.store.trivial.impl; |
17 | 17 | ||
18 | +import static com.google.common.base.Preconditions.checkArgument; | ||
19 | + | ||
18 | import java.util.Map; | 20 | import java.util.Map; |
21 | +import java.util.Map.Entry; | ||
19 | import java.util.Set; | 22 | import java.util.Set; |
20 | import java.util.concurrent.ConcurrentHashMap; | 23 | import java.util.concurrent.ConcurrentHashMap; |
21 | import java.util.concurrent.CopyOnWriteArraySet; | 24 | import java.util.concurrent.CopyOnWriteArraySet; |
25 | +import java.util.stream.Collectors; | ||
22 | 26 | ||
23 | import org.apache.felix.scr.annotations.Component; | 27 | import org.apache.felix.scr.annotations.Component; |
24 | import org.apache.felix.scr.annotations.Reference; | 28 | import org.apache.felix.scr.annotations.Reference; |
... | @@ -55,6 +59,22 @@ public class SimpleLeadershipManager implements LeadershipService { | ... | @@ -55,6 +59,22 @@ public class SimpleLeadershipManager implements LeadershipService { |
55 | } | 59 | } |
56 | 60 | ||
57 | @Override | 61 | @Override |
62 | + public Leadership getLeadership(String path) { | ||
63 | + checkArgument(path != null); | ||
64 | + return elections.get(path) ? new Leadership(path, clusterService.getLocalNode().id(), 0) : null; | ||
65 | + } | ||
66 | + | ||
67 | + @Override | ||
68 | + public Set<String> ownedTopics(NodeId nodeId) { | ||
69 | + checkArgument(nodeId != null); | ||
70 | + return elections.entrySet() | ||
71 | + .stream() | ||
72 | + .filter(Entry::getValue) | ||
73 | + .map(Entry::getKey) | ||
74 | + .collect(Collectors.toSet()); | ||
75 | + } | ||
76 | + | ||
77 | + @Override | ||
58 | public void runForLeadership(String path) { | 78 | public void runForLeadership(String path) { |
59 | elections.put(path, true); | 79 | elections.put(path, true); |
60 | for (LeadershipEventListener listener : listeners) { | 80 | for (LeadershipEventListener listener : listeners) { |
... | @@ -88,5 +108,4 @@ public class SimpleLeadershipManager implements LeadershipService { | ... | @@ -88,5 +108,4 @@ public class SimpleLeadershipManager implements LeadershipService { |
88 | public void removeListener(LeadershipEventListener listener) { | 108 | public void removeListener(LeadershipEventListener listener) { |
89 | listeners.remove(listener); | 109 | listeners.remove(listener); |
90 | } | 110 | } |
91 | - | ||
92 | } | 111 | } | ... | ... |
-
Please register or login to post a comment