如果我有一个具有连续短暂子节点的持久节点,当所有子节点都消失时,是否可以重置序列。
我想要实现的目标:
所以如果一个人死了,下一个应该不填补空白,但是当所有子节点都死掉时,我希望重置序列,如果我再创建一个子节点,它应该从头开始。
这可能吗?来自Java。
答案 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
。