2016-11-24 50 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