Java 按2顺序递增

Java 按2顺序递增,java,apache-zookeeper,Java,Apache Zookeeper,在ZooKeeper中执行一个简单的create()方法调用似乎会增加2,而不是正常的1。虽然这实际上符合,它只指定序列是“单调递增”的,而不参考增量,但我不确定为什么会发生这种情况 zk.create(path, value, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT_SEQUENTIAL); 我以“key-v-0000000056”结束,然后是“key-v-0000000058”…57到哪里去了?在创建下一个键之前是否删除key-v-000000

在ZooKeeper中执行一个简单的create()方法调用似乎会增加2,而不是正常的1。虽然这实际上符合,它只指定序列是“单调递增”的,而不参考增量,但我不确定为什么会发生这种情况

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

我以“key-v-0000000056”结束,然后是“key-v-0000000058”…57到哪里去了?

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

创建或删除任何子节点都会增加父节点的cversion。因为在ZooKeeper 3.3.3中,您似乎正在使用,用于顺序znode创建的计数器是cversion本身,所以两个顺序创建之间的任何“虚假”创建/删除都是您所经历行为的最可能原因


请记住,在ZooKeeper 3.4.x中,删除不再影响父序列计数器:一个
DataNode
内部保存一个
PersistedStat
,其中cversion精确地表示创建的数量;相反,您通过查询节点获得的
Stat
的cversion仍然表示子更改的数量:
Stat.cversion=2*PersistedStat.cversion-Stat.numChildren

在正式文档中,它表示:

如果设置了ZOO_序列标志,则路径名将附加一个唯一的单调递增序列号。”


这保证了数字是按递增顺序排列的,但不一定是连续的。

这就是为什么我说根据JavaDoc可以,我只是不知道删除也会增加cversion。