2012-04-26 35 views
5

在ZooKeeper中執行一個簡單的create()方法調用似乎是增加了兩個而不是正常的。雖然這實際上與JavaDoc保持一致,但它僅指定序列「單調遞增」而未涉及增量,但我不確定爲什麼這開始發生。Zookeeper PERSISTENT_SEQUENTIAL遞增2

zk.create(path, value, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); 

我最終得到了「key-v-0000000056」,然後是「key-v-0000000058」...... 57去了哪裏?

回答

3

是否在創建下一個鍵之前刪除了key-v-0000000056?順序標識只是父節點的轉換,並且在父項上刪除/創建子項會增加cversion。

6

創建或刪除任意子znode遞增父znode的cversion。由於在您看來您正在使用的ZooKeeper 3.3.3中,用於順序znode創建的計數器本身就是cversion,因此兩次連續創建之間的任何「虛假」創建/刪除都是您所遇到行爲的最可能原因。

請記住,在ZooKeeper 3.4.x刪除不會影響父順序計數器了:DataNode內部持有PersistedStat其中cversion代表正確的創建次數;相反,通過查詢節點獲得的Stat的轉義仍然代表子級更改的數量:Stat.cversion = 2*PersistedStat.cversion - Stat.numChildren

0

在官方文件,它說:

如果ZOO_SEQUENCE標誌設置,獨特的單調遞增序列號被附加到路徑名稱「

這保證了數量爲。按照遞增順序,但不一定是連續的。

+1

這就是爲什麼我說它根據JavaDoc沒問題,我只是不知道刪除也增加了cversion。 – MattMcKnight 2012-05-17 11:04:06