doc001

Results 124 comments of doc001

> follower重启后有一定概率出现这个错误,然后就加不进去 > > ```shell > node lgraph:192.168.1.111:19091:0 can't do pre_vote as it is not in 192.168.1.111:19092:0,192.168.1.111:19093:0 > Failed to join group: [E10003][C317683200A33A3ECD0844F9EC364D80][E10003]Peer 192.168.1.111:19091:0 failed to catch up > ```...

这儿是个bug。现在的代码里,pre vote 的时候会使用本地term+1作为term,这就导致A节点term==pre vote term,这个case在braft里是可以过prevote的,实际上应该拒绝掉。

> > 这儿是个bug。现在的代码里,pre vote 的时候会使用本地term+1作为term,这就导致A节点term==pre vote term,这个case在braft里是可以过prevote的,实际上应该拒绝掉。 > > A 节点作为 leader 是有 lease 的,我觉得关键点是为什么 A 节点没有 reject_by_lease,我看代码每个 node 是根据 follower_lease 来 reject prevote 的,而 follower_lease 是在 `handle_append_entries_request` 时 renew...

> 有计划下个版本fix吗? 比如在leader check prevote的时候加一个condition, 如果leader lease还有效就reject? 我来fix一下

> 这个可能和时机有关系,leader给B发的心跳先到达就不会发起prevote

一般情况下是 on_apply 慢了导致的,检查准确的可工作状态可以使用 lease 接口

如果是snapshot是一些文件,那raft本身就能处理,如果需要从rocksdb之类的存储里转一道,可以提供一个定制的file sytem adaptor实现,在open接口里返回定制的file adaptor进行处理,BufferedSequentialReadFileAdaptor和BufferedSequentialWriteFileAdaptor可以简化一些工作

> @PFZheng please help review this. OK, I will review it as soon as possible.

不会出现乱序,execq 是无锁队列,保序的