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