Zookeeper重置序列号

时间:2016-11-24 21:13:29

标签: java apache-zookeeper apache-curator

如果我有一个具有连续短暂子节点的持久节点,当所有子节点都消失时,是否可以重置序列。

我想要实现的目标:

  1. 您创建第一个连续短暂节点:[node-00..01]
  2. 您创建了第二个:[node-00..01,node-00..02]
  3. 您创建第3个:[node-00..01,node-00..02,node-00.003]
  4. 第二个节点死亡:[node-00..01,node-00.003]
  5. 您创建另一个顺序子节点:[node-00..01,node-00..03,node-00.004]
  6. 所以如果一个人死了,下一个应该填补空白,但是当所有子节点都死掉时,我希望重置序列,如果我再创建一个子节点,它应该从头开始。

    这可能吗?来自Java。

1 个答案:

答案 0 :(得分:1)

您可以使用创建模式CONTAINER来实现此目的。当其下没有子节点时,将自动删除容器。

创建顺序短暂节点时,请使用以下方法。

curatorFrameworkInstance.create()
.creatingParentContainersIfNeeded()
.withMode(CreateMode.PERSISTENT_SEQUENTIAL)
.forPath("/<some_path>/<parentNode>/<sequential_path_prefix>");

这里发生的是,如果不存在,策展人将创建父ZNode <parentNode>作为容器。并将在其下创建短暂的顺序节点,这是您在问题中 1到5 中描述的预期行为。当所有孩子都死了,父母ZNode也会死。当您再次尝试创建子项时,creatingParentContainersIfNeeded()子句将确保再次创建父容器。

如需进一步阅读,这是CreateMode.CONTAINER的文档。

  

znode将是一个容器节点。容器节点是用于诸如leader,lock等配方的专用节点。当删除容器的最后一个子容器时,容器将成为服务器在将来某个时候删除的候选容器。给定此属性,您应该准备在此容器节点内创建子级时获取KeeperException.NoNodeException。

注意:我使用Apache Curator Framework来回答您的问题,而不是直接使用ZooKeeper Client