动物园管理员重置连续编号
问题描述:
如果我有一个连续的短暂子节点的永久节点,是否有可能重置序列,当所有的子节点都离开了。动物园管理员重置连续编号
我想什么来实现:
- 创建顺序的第一短暂的节点:节点00..01]
- 您创建一个第二一个:[节点00..01, node-00..02]
- 创建第三个:[node-00..01,node-00..02,node-00.003]
- 第二个节点die:[node-00..01 ,节点00.003]
- 您创建另一个顺序子:[节点00..01,节点00..03,节点00.004]
所以,如果一个死了,下一个应该不填补了国内空白,但是当所有的子节点死了,我想序列被重置,如果我再创建一个子节点应该从一开始开始。
这可能吗?来自Java。
答
您可以通过创建模式CONTAINER
来实现此目的。当它下面没有任何子节点时,容器将被自动删除。
当您创建顺序临时节点时,请使用以下方法。
curatorFrameworkInstance.create()
.creatingParentContainersIfNeeded()
.withMode(CreateMode.PERSISTENT_SEQUENTIAL)
.forPath("/<some_path>/<parentNode>/<sequential_path_prefix>");
这里发生的是,策展人将创建父Z序节点<parentNode>
作为一个容器,如果它不存在。并且会在它下面创建短暂的顺序节点,这是您的问题中从1到5所描述的预期行为。当所有的孩子都死了的时候,父母的ZNode也会死亡。当您尝试再次创建子项时,creatingParentContainersIfNeeded()
子句将确保再次创建父容器。
对于进一步的阅读,这是CreateMode.CONTAINER
的文档。
的Z序节点将是一个容器节点。容器节点是特殊用途的节点,对于诸如领导者,锁等配方是有用的。当容器的最后一个孩子被删除时,容器成为服务器将来某个时候删除的候选者。给定这个属性,你应该准备在这个容器节点内创建子节点时得到KeeperException.NoNodeException。
注意:我已经使用Apache Curator Framework
回答你的问题,而不是直接使用ZooKeeper Client
。
我们你的实际需求是什么?你想要一个分布式序列号还是实际上希望子节点在那里没有间隙? –