Подключение к Zookeeper из AuthenticationProvider в Zookeeper

Я делаю AuthenticationProvider, который во время аутентификации подключается к Zookeeper (тому же, на котором он работает) и проверяет узел, дал ли этот пользователь правильный пароль.

В основном поток выглядит примерно так:

@Override
public KeeperException.Code handleAuthentication(ServerCnxn cnxn, byte[] authData) {
        final String usernameColonPassword = new String(authData);
        String[] split = usernameColonPassword.split(":");
        final String username = split[0];
        final String password = split[1];

        byte[] binary = curator.getData().forPath(ATUH_NODE); // here error is thrown
        // check is password is correct
}

Проблема в том, что я все время получаю KeeperErrorCode = ConnectionLoss в строке, когда куратор получает данные. В чем причина такого поведения? Во время аутентификации мне не разрешено подключаться к Zookeeper, который авторизует клиента?

Ниже полная трассировка стека:

    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for XXX
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
        at org.apache.zookeeper.ZooKeeper.exists(ZooKeeper.java:1045)
        at org.apache.curator.framework.imps.ExistsBuilderImpl$2.call(ExistsBuilderImpl.java:172)
        at org.apache.curator.framework.imps.ExistsBuilderImpl$2.call(ExistsBuilderImpl.java:161)
        at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:107)
        at org.apache.curator.framework.imps.ExistsBuilderImpl.pathInForeground(ExistsBuilderImpl.java:157)
        at org.apache.curator.framework.imps.ExistsBuilderImpl.forPath(ExistsBuilderImpl.java:148)
        at org.apache.curator.framework.imps.ExistsBuilderImpl.forPath(ExistsBuilderImpl.java:36)

person MAGx2    schedule 09.05.2017    source источник


Ответы (1)


Как я понял, это невозможно. В этот момент у zookeeper есть какая-то блокировка/семафор, и он не принимает новые соединения из этого потока.

person MAGx2    schedule 10.05.2017