Zookeeper пропустил события при последовательных изменениях

В настоящее время у меня есть установка с одним узлом зоопарка и куратором для доступа к данным. Чтение данных осуществляется через 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"), но я не понимаю, почему кеш Куратора видит только одно событие?


person stikku    schedule 06.08.2016    source источник


Ответы (1)


ZooKeeper (или TreeCache куратора) не гарантирует, что вы не пропустите события при последовательных изменениях. Гарантия заключается в том, что вы не увидите последовательные изменения в порядке, отличном от того, который увидят другие клиенты.

person igorbel    schedule 08.08.2016