在zookeeper中,znode具有单调版本号,每次修改节点时都会更改。这用于实现原子更新,如果版本号不完全是指定的版本号,则设置操作将失败。
但是,删除znode然后重新创建它将重置其版本号。 想象一下这个场景,一个进程试图以原子方式递增一个值" / x":
现在尝试增加一个数字实际上导致它下降了98! 请注意,这不是理论上的,我已经创建了一个演示这种情况的测试用例。
所以我的问题是:
如何在可以随时删除和重新创建节点的情况下,如何在zookeeper中正确实现原子更新?或者这是系统的一个基本限制,只有在从不重复使用znode路径时它才能正确?