mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
raft: update unstable when calling stableTo with 0
It should update unstable in this case because it may happen that raft only writes entry 0 into stable storage.
This commit is contained in:
parent
ac77971f99
commit
7dba92dd53
@ -134,9 +134,6 @@ func (l *raftLog) appliedTo(i uint64) {
|
||||
}
|
||||
|
||||
func (l *raftLog) stableTo(i uint64) {
|
||||
if i == 0 {
|
||||
return
|
||||
}
|
||||
l.unstable = i + 1
|
||||
}
|
||||
|
||||
|
@ -335,6 +335,7 @@ func TestUnstableEnts(t *testing.T) {
|
||||
}{
|
||||
{3, nil, 3},
|
||||
{1, previousEnts, 3},
|
||||
{0, append([]pb.Entry{{}}, previousEnts...), 3},
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
@ -342,7 +343,9 @@ func TestUnstableEnts(t *testing.T) {
|
||||
raftLog.append(0, previousEnts...)
|
||||
raftLog.unstable = tt.unstable
|
||||
ents := raftLog.unstableEnts()
|
||||
raftLog.stableTo(raftLog.lastIndex())
|
||||
if l := len(ents); l > 0 {
|
||||
raftLog.stableTo(ents[l-1].Index)
|
||||
}
|
||||
if !reflect.DeepEqual(ents, tt.wents) {
|
||||
t.Errorf("#%d: unstableEnts = %+v, want %+v", i, ents, tt.wents)
|
||||
}
|
||||
@ -352,6 +355,24 @@ func TestUnstableEnts(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestStableTo(t *testing.T) {
|
||||
tests := []struct {
|
||||
stable uint64
|
||||
wunstable uint64
|
||||
}{
|
||||
{0, 1},
|
||||
{1, 2},
|
||||
{2, 3},
|
||||
}
|
||||
for i, tt := range tests {
|
||||
raftLog := newLog()
|
||||
raftLog.stableTo(tt.stable)
|
||||
if raftLog.unstable != tt.wunstable {
|
||||
t.Errorf("#%d: unstable = %d, want %d", i, raftLog.unstable, tt.wunstable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TestCompaction ensures that the number of log entreis is correct after compactions.
|
||||
func TestCompaction(t *testing.T) {
|
||||
tests := []struct {
|
||||
|
@ -298,9 +298,7 @@ func (n *node) run(r *raft) {
|
||||
if prevHardSt.Commit != 0 {
|
||||
r.raftLog.appliedTo(prevHardSt.Commit)
|
||||
}
|
||||
if prevLastUnstablei != 0 {
|
||||
r.raftLog.stableTo(prevLastUnstablei)
|
||||
}
|
||||
r.raftLog.stableTo(prevLastUnstablei)
|
||||
advancec = nil
|
||||
case <-n.done:
|
||||
return
|
||||
|
Loading…
x
Reference in New Issue
Block a user