Package org.apache.solr.cloud
Class LeaderElector
java.lang.Object
org.apache.solr.cloud.LeaderElector
Leader Election process. This class contains the logic by which a leader is chosen. First call
setup(ElectionContext) to ensure the election process is init'd. Next call joinElection(ElectionContext, boolean) to start the leader election.
The implementation follows the classic ZooKeeper recipe of creating an ephemeral, sequential node for each candidate and then looking at the set of such nodes - if the created node is the lowest sequential node, the candidate that created the node is the leader. If not, the candidate puts a watch on the next lowest node it finds, and if that node goes down, starts the whole process over by checking if it's the lowest sequential node, etc.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Patternprotected org.apache.solr.common.cloud.SolrZkClient -
Constructor Summary
ConstructorsConstructorDescriptionLeaderElector(org.apache.solr.common.cloud.SolrZkClient zkClient) LeaderElector(org.apache.solr.common.cloud.SolrZkClient zkClient, org.apache.solr.cloud.ZkController.ContextKey key, Map<org.apache.solr.cloud.ZkController.ContextKey, ElectionContext> electionContexts) -
Method Summary
Modifier and TypeMethodDescriptionstatic StringgetNodeName(String nStringSequence) static intReturns int given String of form n_0000000001 or n_0000000003, etc.intjoinElection(ElectionContext context, boolean replacement) intjoinElection(ElectionContext context, boolean replacement, boolean joinAtHead) Begin participating in the election process.protected voidrunIamLeaderProcess(ElectionContext context, boolean weAreReplacement) voidsetup(ElectionContext context) Set up any ZooKeeper nodes needed for leader election.static voidSort n string sequence list.
-
Field Details
-
LEADER_SEQ
-
zkClient
protected org.apache.solr.common.cloud.SolrZkClient zkClient
-
-
Constructor Details
-
LeaderElector
public LeaderElector(org.apache.solr.common.cloud.SolrZkClient zkClient) -
LeaderElector
public LeaderElector(org.apache.solr.common.cloud.SolrZkClient zkClient, org.apache.solr.cloud.ZkController.ContextKey key, Map<org.apache.solr.cloud.ZkController.ContextKey, ElectionContext> electionContexts)
-
-
Method Details
-
getContext
-
runIamLeaderProcess
protected void runIamLeaderProcess(ElectionContext context, boolean weAreReplacement) throws org.apache.zookeeper.KeeperException, InterruptedException - Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
getSeq
Returns int given String of form n_0000000001 or n_0000000003, etc.- Returns:
- sequence number
-
getNodeName
-
joinElection
public int joinElection(ElectionContext context, boolean replacement) throws org.apache.zookeeper.KeeperException, InterruptedException - Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
joinElection
public int joinElection(ElectionContext context, boolean replacement, boolean joinAtHead) throws org.apache.zookeeper.KeeperException, InterruptedException Begin participating in the election process. Gets a new sequential number and begins watching the node with the sequence number before it, unless it is the lowest number, in which case, initiates the leader process. If the node that is watched goes down, check if we are the new lowest node, else watch the next lowest numbered node.- Returns:
- sequential node number
- Throws:
org.apache.zookeeper.KeeperExceptionInterruptedException
-
setup
public void setup(ElectionContext context) throws InterruptedException, org.apache.zookeeper.KeeperException Set up any ZooKeeper nodes needed for leader election.- Throws:
InterruptedExceptionorg.apache.zookeeper.KeeperException
-
sortSeqs
Sort n string sequence list.
-