【发布时间】:2016-12-30 04:21:32
【问题描述】:
我正在尝试使用 Java Apache Curator 库中的事务将数据写入 ZooKeeper。
这是我的代码:
private CuratorFramework client;
...
private void writeToZK() {
String nodePath = "/path/to/node";
client.inTransaction().create().forPath(nodePath).and().commit(); // problem
}
(我使用的是curator 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(),它得到了 zookeeper 响应,其中包含
OpResult: err = -101, type = -1.
如果我用这个替换“//问题”行,它会起作用:
client.create().creatingParentsIfNeeded().forPath(nodePath); // runs with no problem
有什么想法吗?
【问题讨论】:
-
如果你不使用事务,Curator 的标准 create() DSL 有 createdParentsIfNeeded() 选项。
标签: java apache-zookeeper apache-curator