Когда куратор lib повторяет попытку - PullRequest
0 голосов
/ 25 февраля 2020

У меня сложилось впечатление, что куратор lib сделает повтор для всех операций Zookeeper, даже если сеанс потерян. Я моделировал случай, когда я создал узел и затем установил некоторые данные для этого узла. Затем при получении данных я убил сессию. Я вижу, что куратор может повторно подключиться к сеансу, но я подумал, что он также попытается и получит данные, которых не было. Есть ли документация относительно того, когда именно и для каких операций куратор делает повторную попытку.

Код, который следит за узлом:

getAsyncCuratorFramework(curatorFramework)
            .watched()
            .checkExists()
            .forPath(fullNodePath)
            .event()
            .toCompletableFuture()
            .get(jobTimeoutDO.getDuration(), jobTimeoutDO.getTimeUnit());

Теперь я имитирую тест, в котором я наблюдаю эфемерное узел для события удаления узла, и я планирую следующий вызов между:

KillSession.kill

Поскольку сеанс был прерван, узел будет удален, и куратор попытается установить sh соединение снова. Все это работает нормально и, как и ожидалось. Но я также подумал, что куратор попытается повторить и снова просмотреть узел, конечно, если узел не существует, он может выдать исключение, но я снова создаю узел.

Просто хотел подтвердить, что в приведенном выше сценарии куратор не будет повторять попытку. Кстати, он выдает следующее исключение:

AsyncEventException

1 Ответ

1 голос
/ 26 февраля 2020

Но я также подумал, что куратор будет повторять попытку и снова наблюдать за узлом

Это не так, как работают повторные попытки. Повторяет в кураторе повторные попытки отдельных операций ZooKeeper. Они не являются функцией высокого уровня и не будут сбрасывать часы для вас. То, что вы ищете, это один из рецептов высокого уровня куратора, которые управляют ZNode. Посмотрите на PersistentNode или NodeCache .

...