【发布时间】:2016-08-15 16:24:41
【问题描述】:
当我在带有 curator 的 Zookeeper 节点上调用 getChildren() 时,有没有办法忽略代表锁的子节点?
我想用一个特定节点的数据读取所有子节点。因此,我首先调用 getChildren() 并遍历返回的 List 并对每个这样的孩子调用 getData()。为了避免孩子们在两者之间发生变化,我首先需要一个 InterProcessMutex。不幸的是,孩子的列表也包含这个互斥体。
InterProcessMutex mutex = new InterProcessMutex(client, parentNodePath);
mutex.acquire();
try {
List<String> children = client.getChildren().forPath(parentNodePath);
for (String child : children) {
// do something
// ignore the lock-node
}
} finally {
mutex.release();
}
有没有更聪明的方法来做到这一点?或者只是忽略锁定节点?
【问题讨论】:
-
无论如何,即使我手动过滤掉锁定孩子,这也不起作用。这在创建具有不同客户端的节点 1-2 次后挂断。也许我正在陷入无限循环,因为以这种方式获取和释放锁会触发所有其他客户端上的 getChildren-watchers,这些客户端也尝试获取互斥锁等等。当我删除互斥体时,一切都按预期工作。
标签: java apache-zookeeper apache-curator