2016-08-06 11 views
1

Ich habe derzeit ein Setup mit einem einzigen Zookeeper-Knoten und Kurator, um auf die Daten zugreifen. Das Lesen von Daten erfolgt über einen Kurator TreeCache.Zookeeper verpasste Ereignisse bei aufeinanderfolgenden Änderungen

Ich habe den folgenden Test:

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>); 
} 

Beachten Sie, dass "new_node" nicht existiert, bevor der Test durchgeführt wird.

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); 
    } 
} 

Ich erwarte, dass der Hörer Cache wird zuerst das Ereignis eines Knotens mit „some Schnur 4“ hinzugefügt hörte und hörte dann ein weiteres Ereignis von Knoten mit „some String 5“ aktualisiert.

Stattdessen empfange ich nur das Ereignis für einen Knoten mit dem Wert „einige Zeichenfolge 5“ hinzugefügt

in den Protokollen der Suche beiden Befehle ausgeführt werden. d.h. "N: Irgendeine Saite 4" und "E: Irgendeine Saite 5" werden beide protokolliert. Und der letzte Wert in Zookeeper ist korrekt ("einige Zeichenfolge 5"), aber ich verstehe nicht, warum der Curator-Cache nur ein einzelnes Ereignis sieht?

Antwort

1

ZooKeeper (oder Curator's TreeCache) garantiert nicht, dass Sie Ereignisse bei aufeinanderfolgenden Änderungen nicht verpassen. Die Garantie besteht darin, dass Sie aufeinanderfolgende Änderungen nicht in einer anderen Reihenfolge sehen als bei anderen Kunden.

Verwandte Themen