Zookeeper PERSISTENT_SEQUENTIAL递增2

Mat*_*ght 5 java apache-zookeeper

在ZooKeeper中执行一个简单的create()方法调用似乎是递增两个而不是正常的.虽然这实际上与JavaDoc保持一致,而JavaDoc仅指定序列"单调增加"而不参考增量,但我不确定为什么这已经开始发生.

zk.create(path, value, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL);
Run Code Online (Sandbox Code Playgroud)

我最终得到了"key-v-0000000056",然后是"key-v-0000000058"...... 57在哪里?

Luc*_*tti 7

创建或删除任何子 znode会增加父znode的cversion.因为在看起来你正在使用的ZooKeeper 3.3.3中,用于顺序znode创建的计数器本身就是cversion,两个连续创建之间的任何"虚假"创建/删除都是你遇到的行为的最可能原因.

请记住,在ZooKeeper 3.4.x中,删除不再影响父序列计数器:a DataNode内部保存一个PersistedStatcversion,其中cversion完全代表创建的数量; 相反,Stat通过查询节点获得的结果仍然代表了儿童变化的数量:Stat.cversion = 2*PersistedStat.cversion - Stat.numChildren.


sbr*_*ges 4

您是否在创建下一个密钥之前删除 key-v-0000000056 ?顺序id只是父节点的cversion,在父节点上删除/创建子节点将增加cversion。