I saw the leader election code here -
https://git-wip-us.apache.org/repos/asf?p=curator.git;a=tree;f=curator-examples/src/main/java/leader;h=73b547eadb98995c0ccbd06a5b76d0741ffef263;hb=HEAD
But didn't understand few things - How can I call something like this in my
code - I want to do stuff in my code by just checking whether I am the
leader or not. And from the LeaderSelectorExample, I am not able to
understand this.
if (zookClient.isLeader()) {
// then do stuff
}
On Thu, Jan 15, 2015 at 3:17 PM, Jordan Zimmerman <
[email protected]> wrote:
> Oh - maybe I read the code too fast. I guess it doesn’t make more than one…
>
> There’s an example of LeaderSelector here:
> http://curator.apache.org/curator-examples/index.html
>
>
> On January 15, 2015 at 6:00:03 PM, Check Peck ([email protected])
> wrote:
>
> Thanks Jordan for the input.
>
> * Where do you see that I am creating new Curator instance for each
> Leader? I guess I am using one Curator instance for my application?
> * Ok, I have commented out this line in ZookeeperClient class
> * That's a good point, how would I use the listener or the leaderselector
> in my code base? If possible, can you provide an example?
>
>
> On Thu, Jan 15, 2015 at 2:38 PM, Jordan Zimmerman <
> [email protected]> wrote:
>
>> A few things:
>>
>> * You don’t need to create a new Curator instance for each Leader. One
>> Curator instance can be used for an application.
>> * Calling client.getZookeeperClient().blockUntilConnectedOrTimedOut();
>> is unnecessary
>> * Calling isLeader() immediately after starting the latch may not work.
>> It takes time for the leader to get selected. LeaderLatch has a listener if
>> you want to get notified. Alternatively, you can use LeaderSelector.
>>
>> Hope this helps.
>>
>> -Jordan
>>
>>
>>
>> On January 15, 2015 at 5:25:26 PM, Check Peck ([email protected])
>> wrote:
>>
>> I am using Zookeeper for the leadership election process. I have three
>> nodes zookeeper ensemble.
>>
>> We have a node like this "/test/msn" on which we are doing the leadership
>> election and it works fine and we have application servers running it in
>> production and using "/test/msn" node for leadership. And this program is
>> always running.
>>
>> Now we created another node like this "/testpnl" in the same zookeeper
>> servers. And we have another set of machines which is trying to do the
>> leadership election on that node and whenever I run my program in
>> production from one servers, it always returns back that the node is not
>> leader? And I can see only one node inside "/testpnl" and it is the same
>> node from which I am running my program?
>>
>> I am using Curator 2.7.0 and the zookeeper version is 3.4.5 Is there
>> anything wrong with my setup or zookeeper has some bug which I am not aware?
>>
>> Is anything
>>
>> public class ZookeeperLeaderTester {
>>
>> private ZookeeperClient zookClient;
>>
>> private static final String ZOOK_PRODUCTION =
>> "host1:2181,host2:2181,host3:2181";
>> private static final String LEADERSHIP_NODE = "/testpnl";
>>
>> private static class Holder {
>> static final ZookeeperLeaderTester INSTANCE = new
>> ZookeeperLeaderTester();
>> }
>>
>> public static ZookeeperLeaderTester getInstance() {
>> return Holder.INSTANCE;
>> }
>>
>> private ZookeeperLeaderTester() {
>> try {
>> String hostname = getHostName();
>>
>> zookClient = new ZookeeperClient(nodes, LEADERSHIP_NODE,
>> hostname);
>> zookClient.start();
>>
>> } catch (Exception ex) {
>> System.out.println (ex);
>> System.exit(1);
>> }
>> }
>>
>> public ZookeeperClient getZookClient() {
>> return zookClient;
>> }
>> }
>>
>> And here is my ZookeeperClient code -
>>
>> public class ZookeeperClient {
>>
>> private CuratorFramework client;
>> private String latchPath;
>> private String id;
>> private LeaderLatch leaderLatch;
>>
>> public ZookeeperClient(String connString, String latchPath,
>> String id) {
>> client = CuratorFrameworkFactory.newClient(connString, new
>> ExponentialBackoffRetry(1000, Integer.MAX_VALUE));
>> this.id = id;
>> this.latchPath = latchPath;
>> }
>>
>> public void start() throws Exception {
>> client.start();
>> client.getZookeeperClient().blockUntilConnectedOrTimedOut();
>> leaderLatch = new LeaderLatch(client, latchPath, id);
>> leaderLatch.start();
>> }
>>
>> public boolean isLeader() {
>> return leaderLatch.hasLeadership();
>> }
>>
>> public Participant currentLeader() throws Exception {
>> return leaderLatch.getLeader();
>> }
>>
>> public void close() throws IOException {
>> leaderLatch.close();
>> client.close();
>> }
>>
>> public CuratorFramework getClient() {
>> return client;
>> }
>>
>> public String getLatchPath() {
>> return latchPath;
>> }
>>
>> public String getId() {
>> return id;
>> }
>>
>> public LeaderLatch getLeaderLatch() {
>> return leaderLatch;
>> }
>> }
>>
>> And this is the way I am using it -
>>
>> ZookeeperLeaderTester zookClient =
>> ZookeeperLeaderTester.getInstance().getZookClient();
>> if (zookClient.isLeader()) {
>> // then do stuff
>> }
>>
>>
>