2016-11-24 129 views
1

如果我有一个连续的短暂子节点的永久节点,是否有可能重置序列,当所有的子节点都离开了。动物园管理员重置连续编号

我想什么来实现:

  1. 创建顺序的第一短暂的节点:节点00..01]
  2. 您创建一个第二一个:[节点00..01, node-00..02]
  3. 创建第三个:[node-00..01,node-00..02,node-00.003]
  4. 第二个节点die:[node-00..01 ,节点00.003]
  5. 您创建另一个顺序子:[节点00..01,节点00..03,节点00.004]

所以,如果一个死了,下一个应该填补了国内空白,但是当所有的子节点死了,我想序列被重置,如果我再创建一个子节点应该从一开始开始。

这可能吗?来自Java。

+0

我们你的实际需求是什么?你想要一个分布式序列号还是实际上希望子节点在那里没有间隙? –

回答

1

您可以通过创建模式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