@Service public class HazelcastLeadershipService extends Object implements org.onosproject.cluster.LeadershipService
The election is eventually-consistent: if there is Hazelcast partitioning, and the partitioning is healed, there could be a short window of time until the leaders in each partition discover each other. If this happens, the leaders release the leadership and run again for election.
The leader election is based on Hazelcast's Global Lock, which is stongly consistent. In addition, each leader periodically advertises events (using a Hazelcast Topic) that it is the elected leader. Those events are used for two purposes: (1) Discover multi-leader collisions (in case of healed Hazelcast partitions), and (2) Inform all listeners who is the current leader (e.g., for informational purpose).
| Modifier and Type | Field and Description |
|---|---|
protected org.onosproject.store.cluster.messaging.ClusterCommunicationService |
clusterCommunicator |
protected org.onosproject.cluster.ClusterService |
clusterService |
protected org.onosproject.event.EventDeliveryService |
eventDispatcher |
protected StoreService |
storeService |
| Constructor and Description |
|---|
HazelcastLeadershipService() |
| Modifier and Type | Method and Description |
|---|---|
protected void |
activate() |
void |
addListener(org.onosproject.cluster.LeadershipEventListener listener) |
protected void |
deactivate() |
org.onosproject.cluster.NodeId |
getLeader(String path) |
Map<String,org.onosproject.cluster.Leadership> |
getLeaderBoard() |
org.onosproject.cluster.Leadership |
getLeadership(String path) |
Set<String> |
ownedTopics(org.onosproject.cluster.NodeId nodeId) |
void |
removeListener(org.onosproject.cluster.LeadershipEventListener listener) |
void |
runForLeadership(String path) |
void |
withdraw(String path) |
@Reference(cardinality=MANDATORY_UNARY) protected org.onosproject.store.cluster.messaging.ClusterCommunicationService clusterCommunicator
@Reference(cardinality=MANDATORY_UNARY) protected org.onosproject.cluster.ClusterService clusterService
@Reference(cardinality=MANDATORY_UNARY) protected StoreService storeService
@Reference(cardinality=MANDATORY_UNARY) protected org.onosproject.event.EventDeliveryService eventDispatcher
@Activate protected void activate()
@Deactivate protected void deactivate()
public org.onosproject.cluster.NodeId getLeader(String path)
getLeader in interface org.onosproject.cluster.LeadershipServicepublic org.onosproject.cluster.Leadership getLeadership(String path)
getLeadership in interface org.onosproject.cluster.LeadershipServicepublic Set<String> ownedTopics(org.onosproject.cluster.NodeId nodeId)
ownedTopics in interface org.onosproject.cluster.LeadershipServicepublic void runForLeadership(String path)
runForLeadership in interface org.onosproject.cluster.LeadershipServicepublic void withdraw(String path)
withdraw in interface org.onosproject.cluster.LeadershipServicepublic Map<String,org.onosproject.cluster.Leadership> getLeaderBoard()
getLeaderBoard in interface org.onosproject.cluster.LeadershipServicepublic void addListener(org.onosproject.cluster.LeadershipEventListener listener)
addListener in interface org.onosproject.cluster.LeadershipServicepublic void removeListener(org.onosproject.cluster.LeadershipEventListener listener)
removeListener in interface org.onosproject.cluster.LeadershipServiceCopyright © 2015. All rights reserved.