Class LeaderElector

java.lang.Object
org.apache.solr.cloud.LeaderElector

public class LeaderElector extends Object
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 Details

    • LEADER_SEQ

      public static final Pattern 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

      public ElectionContext getContext()
    • runIamLeaderProcess

      protected void runIamLeaderProcess(ElectionContext context, boolean weAreReplacement) throws org.apache.zookeeper.KeeperException, InterruptedException
      Throws:
      org.apache.zookeeper.KeeperException
      InterruptedException
    • getSeq

      public static int getSeq(String nStringSequence)
      Returns int given String of form n_0000000001 or n_0000000003, etc.
      Returns:
      sequence number
    • getNodeName

      public static String getNodeName(String nStringSequence)
    • joinElection

      public int joinElection(ElectionContext context, boolean replacement) throws org.apache.zookeeper.KeeperException, InterruptedException
      Throws:
      org.apache.zookeeper.KeeperException
      InterruptedException
    • 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.KeeperException
      InterruptedException
    • setup

      public void setup(ElectionContext context) throws InterruptedException, org.apache.zookeeper.KeeperException
      Set up any ZooKeeper nodes needed for leader election.
      Throws:
      InterruptedException
      org.apache.zookeeper.KeeperException
    • sortSeqs

      public static void sortSeqs(List<String> seqs)
      Sort n string sequence list.