5.4.2节中,是否存在已提交日志的覆盖情况
guhanjie opened this issue · 1 comments
guhanjie commented
guhanjie commented
自问自答:
要回答上面的问题,要理解清楚committed到底是指什么,官方leaders rule定义了commited:
如果存在一个满足N > commitIndex的 N,并且大多数的matchIndex[i] ≥ N成立,并且log[N].term == currentTerm成立,那么令 commitIndex 等于这个 N (5.3 和 5.4 节)
注意上面的条件必须满足log[N].term == currentTerm
所以,上面的疑问:是否存在已提交日志的覆盖情况
如果Term=2,Index=2的日志对于Leader S1已提交,那时S1 Term至少为4,意味着大多数节点已经接收了Term=4的日志,如(e)所示,那此时S5是无法成为Leader的,因此不会被覆盖。
反之,如果S1在crash之前未commited Term=2,Index=2的日志,那么S5成为Leader后根据规则,是可以覆盖该日志的。
最后文中也有这样的描述:
领导人完全特性保证了领导人一定拥有所有已经被提交的日志条目,但是在他任期开始的时候,他可能不知道哪些是已经被提交的。为了知道这些信息,他需要在他的任期里提交一条日志条目。