почему zookeeper не может использовать флаг при выходе из двойного барьера? - PullRequest
0 голосов
/ 03 декабря 2018

В рецептах и ​​решениях zookeeper ( здесь ) говорится:

При выходе вы не можете использовать флаг, например, готовый, потому что вы наблюдаете за узлами процессауходить.Используя эфемерные узлы, процессы, которые завершаются неудачно после того, как барьер введен, не препятствуют завершению правильных процессов.Когда процессы готовы к выходу, им нужно удалить свои узлы процессов и ждать, пока все другие процессы сделают то же самое.

Я не могу понять, почему мы не можем использовать такой флаг, как "оставить "при выходе из барьера.

Я думаю, мы можем сделать так:

  1. Установить часы: существует (b +" / оставить ", правда)
  2. удалить узел
  3. L = getChildren (b, false)
  4. , если L == 0: нет дочерних элементов (кроме покинуть узел и готовый узел): создать (b + "/ выйти")

, таким образом, каждый узел получит уведомление, потому что сначала мы удаляем узел, затем getChildren, что означает, что мы получим хотя бы один узел без дочерних элементов, затем будет создан узел выхода и каждый узелполучит уведомление.

...