2016-11-24 10 views
1

一時的な一時的な子ノードを持つ永続ノードがある場合、すべての子ノードがなくなったときにシーケンスをリセットすることは可能ですか?Zookeeperリセットの連続番号

私は何を達成したいと思います:あなたが第二1を作成し、[ノード-00..01]

    1. あなたが最初のシーケンシャルはかないノードを作成[ノード-00..01、ノード-00..02]
    2. あなたは第三を作成:[ノード-00..01、ノード-00..02、ノード-00.003]
    3. 第二のノードが死ぬ:[ノード-00..01 、node-00.003]
    4. 別の順次子を作成します。[node-00..01、node-00..03、node-00.004]

    だから、1が死亡した場合は、次のものがのギャップを埋めるべきではありませんが、すべての子ノードが死ぬとき、私は順序がリセットになりたい、と私は再び子ノードを作成した場合、それはから開始する必要があります始まり。

    これは可能ですか? 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はコンテナノードになります。コンテナノードは、リーダ、ロックなどのレシピに役立つ特別な目的のノードです。コンテナの最後の子が削除されると、コンテナは将来、ある時点でサーバによって削除される候補になります。このプロパティを指定すると、このコンテナノード内に子を作成するときにKeeperException.NoNodeExceptionを取得する準備ができているはずです。

    :私はあなたの質問ではなく、直接ZooKeeper Clientを使用してに答えるためにApache Curator Frameworkを使用しています。

    関連する問題