2016-12-29 14 views
1

JavaのApache Curatorライブラリでトランザクションを使用してZooKeeperにデータを書き込もうとしています。ここでCuratorTransaction KeeperErrorCode = NoNode

は私のコードです:

private CuratorFramework client; 
... 
private void writeToZK() { 
    String nodePath = "/path/to/node"; 
    client.inTransaction().create().forPath(nodePath).and().commit(); // problem 
} 

(私はキュレーターのv2.9.0を使用しています)

これはスロー:

org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode 
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:111) 
    at org.apache.zookeeper.ZooKeeper.multiInternal(ZooKeeper.java:949) 
    at org.apache.zookeeper.ZooKeeper.multi(ZooKeeper.java:915) 

を私はZooKeeper.multiInternalに掘っ()、それはです飼い猫係応答

OpResult: err = -101, type = -1. 

私はこれを「//問題」の行を交換する場合、それが動作します:

任意のアイデア?

+0

トランザクションを使用していない場合、キュレーターの標準create()DSLにはcreatingParentsIfNeeded()オプションがあります。 – Randgalt

答えて

2

zookeeperでは、すべてのノードがパスで定義されています。ドキュメントを見てください:https://zookeeper.apache.org/doc/trunk/zookeeperOver.html 標準的なファイルシステムのように構成されています。 "/ path/to"が存在しない場合、 "/ path/to/node"を作成できないということです。 ノードの親が存在しない場合は、zookeeperによって自動的に作成されるため、提案するソリューションは正しいです。

+1

だから、基本的には、CuratorTransactionは親ノードを正常に処理しません。私は別のcreate()で親ノードを作成し、それは動作します。ありがとう! – Jack

+1

それは問題であるキュレーターではありません。 ZooKeeper自体はこれをサポートしていません。 – Randgalt

関連する問題