В настоящее время у меня есть установка с одним узлом зоопарка и куратором для доступа к данным. Чтение данных осуществляется через 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».
Вместо этого я получаю событие только для узла, добавленного со значением "некоторая строка 5"
Глядя на журналы, обе команды выполняются. то есть «N: некоторая строка 4» и «E: некоторая строка 5» регистрируются. И итоговое значение в Zookeeper верное ("какая-то строка 5"), но я не понимаю, почему кеш Куратора видит только одно событие?