Closed huzhihong closed 5 years ago
onSnapshotLoad这个方法在启动的时候会被调用多次,我代码其中有一个逻辑是判断当前状态机有没有数据,已经有数据就不需要从快照恢复,onSnapshotLoad直接返回false,最后导致了结点状态一致不正确。现在我想问onSnapshotLoad被调用多次的情况下,是以快照数据为准,还是以当前状态机的数据为准?
正确的做法是以快照为准,重启时不需要为你自己的状态机额外保存任何状态,如果你的状态机数据做了持久化到磁盘,请启动前删除,依靠 onSnapshotLoad + replay raft log 来恢复,这样数据一致性
另外 onSnapshotLoad 如果返回 false,会将状态机设置为 error 状态并停止状态机
@fengjiachun 建议这一点写入到我们的文档
@fengjiachun 建议这一点写入到我们的文档
恩,我来更新一下文档
嗯嗯 明白了 谢谢
不用客气,没有更多问题的话就关闭这个 issue 了
https://github.com/sofastack/sofastack.tech/pull/291
更新了文档中 snapshot 部分