Во-первых, в случае окончания сеанса ZooKeeper (с точки зрения клиента) не происходит, пока вы не восстановите соединение с здоровым ансамблем. т. е. вы не знаете, что ваша сессия закончилась до тех пор, пока вы не восстановите соединение.
Apache Curator (примечание: Я главный автор) представляет концепцию «состояния соединения», которая является абстракцией поверх внутренней концепции состояния ZooKeeper. Важно отметить, что обработка состояния соединения куратора изменилась с версий до 3.x и версий 3.x и выше.
До 3.x состояние подключения куратора не имело отношения к сеансу ZooKeeper. Состояние соединения LOST означает, что сконфигурированная RetryPolicy отказалась. В Curator 3.x и выше, когда соединение с ансамблем потеряно, куратор устанавливает внутренний таймер, и если этот таймер передает согласованный тайм-аут сеанса перед повторным подключением к ансамблю ZooKeeper, куратор изменяет LOST и «подделывает» тайм-аут сеанса до внутренне управляемый дескриптор ZooKeeper.
Это описано здесь: http://curator.apache.org/errors.html
Благодаря @Randgalt, я прочитал документ, но я до сих пор путают. Таким образом, версии 3.x и выше ничего не делают для восстановления соединения после истечения срока действия сеанса (часы/эфемерные узлы), и я должен обрабатывать их вручную правильно? – rodi
Если вы пишете исходные API-интерфейсы, да, вы должны восстановить свои часы (нет способа не делать этого). Однако, если вы используете любой готовый рецепт куратора, все это обрабатывается для вас. Вот почему я всегда говорю: https://cwiki.apache.org/confluence/display/CURATOR/TN6 – Randgalt