pro2ab中raftlog.stabled更新问题

什么时候更新呢?
具体在TestFollowerAppendEntries2AB遇到该问题

stabled的更新其实具体在2AC中,在2ac中你要通过raft内部的状态变化生成Ready结构体,通过advance函数更新stabled属性,这些发生在RawNode中。
而具体持久化发生在advance函数之前,这部分你将会在2B中写到。它是由更上层的peer调用持久化过程。

1 个赞

在这个测试案例中,需要返回unstableEntry作为结果对比,如果我不确定怎么更新stabledIndex,那么这个结果我返回来就是错误的

在这个test中stabledIndex不需要更新,初始化就可以了

初始化的时候,我在newlog里面stable = lastIdx的,
自身初始化:storage.Append([]pb.Entry{{Term: 1, Index: 1}, {Term: 2, Index: 2}}),那么我的初始化stable是lastIdx也就是2

案例测试2: 1, 1, 4,
[]*pb.Entry{{Term: 3, Index: 2}, {Term: 4, Index: 3}},
[]*pb.Entry{{Term: 1, Index: 1}, {Term: 3, Index: 2}, {Term: 4, Index: 3}},
[]*pb.Entry{{Term: 3, Index: 2}, {Term: 4, Index: 3}},

#1: unstableEnts = [{EntryType:EntryNormal Term:4 Index:3 Data:[] XXX_NoUnkeyedLiteral:{} XXX_unrecognized:[] XXX_sizecache:0}],
want [{EntryType:EntryNormal Term:3 Index:2 Data:[] XXX_NoUnkeyedLiteral:{} XXX_unrecognized:[] XXX_sizecache:0} {EntryType:EntryNormal Term:4 Index:3 Data:[] XXX_NoUnkeyedLiteral:{} XXX_unrecognized:[] XXX_sizecache:0}]

这个案例其实更新了一个冲突的案例,那就是<2,2>这个,现在内存中是<1,1><3,2><4,3>,如果我还是按照stable=2计算的话,返回的只能是<4,3>而不是<3,2><4,3>

append的时候,遇到冲突,需要把原来已经stable的删掉,stable index需要减小,我的逻辑

2 个赞

我回看了一下我的代码,在appendHandle处理的时候确实需要处理stabled, 在日志冲突需要删除日志的时候对应的stabled要减少

1 个赞

是的,所以我才问都什么时候需要更新的

本问题已经解决,后续有错误再来询问,感谢大家

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。