Метод takeLeadership () класса LeaderSelectorListener не вызывается - PullRequest
0 голосов
/ 02 мая 2018

У меня работает автономный сервер zookeeper.

    client = CuratorFrameworkFactory.newClient(zkHostPorts, retryPolicy);
    client.start();

    assertThat(client.checkExists().forPath("/")).isNotNull(); // working

    listener = new LeaderSelectorListenerAdapter() {
        @Override
        public void takeLeadership(CuratorFramework client) throws Exception {

            System.out.println("This method is never called! :( ");
            Thread.sleep(5000);
        }
    };
    String path = "/somepath";
    leaderSelector = new LeaderSelector(client, path, listener);
    leaderSelector.autoRequeue();
    leaderSelector.start();

Я успешно подключаюсь к серверу, определяю слушателя и начинаю выборы лидера.

Примечание: есть только 1 клиент.

Но мое клиентское приложение никогда не берет лидерства. Я не могу понять, что я делаю неправильно. Также это тривиальный сценарий с одним клиентом. Не должен ли клиент уже быть лидером

EDIT: Это работает, если я использую TestingServer из библиотеки кураторских тестов вместо запуска моего сервера Zookeeper, как показано ниже -

TestingServer server = new TestingServer();
client = CuratorFrameworkFactory.newClient(server.getConnectString(), retryPolicy);
...

Значит ли это, что с моим сервером zookeeper что-то не так? Это мой zoo.cfg -

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/ex1
clientPort=2181

Кроме того, сервер работает нормально, так как я могу подключиться к нему с помощью cli и могу создавать / удалять zNodes.

...