【发布时间】:2016-12-12 21:11:54
【问题描述】:
我目前有一个带有单个 zookeeper 节点和 Curator 的设置来访问数据。通过 Curator TreeCache 读取数据。
我有以下测试:
public void test_callback_successive_changes_success_global_new_version() throws InterruptedException {
ZookeeperTestsHelper.createNewNodeInZookeeperSingleCommand("/my/path/new_node", "some string4", curator);
ZookeeperTestsHelper.createNewNodeInZookeeperSingleCommand("/my/path/new_node", "some string5", curator);
Thread.sleep(1000);
assertThat(<check what events the listener heard>);
}
请注意,在执行测试之前“new_node”不存在。
public static void createNewNodeInZookeeperSingleCommand(final String fullPathOfValueInZookeeper, final String valueToSet, final CuratorFramework curator) {
try {
if (curator.checkExists().forPath(fullPathOfValueInZookeeper) != null) {
System.out.println("E: " + valueToSet);
//Node already exists just set it
curator.setData().forPath(fullPathOfValueInZookeeper, valueToSet.getBytes());
} else {
System.out.println("N: " + valueToSet);
//Node needs to be created
curator.create().creatingParentsIfNeeded().forPath(fullPathOfValueInZookeeper, valueToSet.getBytes());
}
} catch (Exception e) {
throw new IllegalStateException("Error", e);
}
}
我希望缓存侦听器首先听到添加了“某些字符串 4”的节点的事件,然后听到另一个使用“某些字符串 5”更新的节点事件。
相反,我只接收添加了值“some string 5”的节点的事件
查看日志,两个命令都在执行。即“N: some string 4”和“E: some string 5”都被记录下来。 Zookeeper 中的最终值是正确的(“some string 5”),但我不明白为什么 Curator 缓存只看到一个事件?
【问题讨论】:
标签: java apache-zookeeper apache-curator