Zookeeper 重置序号

Zookeeper reset sequential number

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

我想达到的目标:

  1. 您创建了第一个顺序临时节点:[node-00..01]
  2. 你创建第二个:[node-00..01, node-00..02]
  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]

所以如果一个死了,下一个应该不会填补空白,但是当所有子节点都死了,我想重置序列,如果我创建一个再次是子节点,它应该从头开始。

这可能吗?来自 Java.

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

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

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

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

为了进一步阅读,这是 CreateMode.CONTAINER 的文档。

The znode will be a container node. Container nodes are special purpose nodes useful for recipes such as leader, lock, etc. When the last child of a container is deleted, the container becomes a candidate to be deleted by the server at some point in the future. Given this property, you should be prepared to get KeeperException.NoNodeException when creating children inside of this container node.

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