mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #1711 from bdarnell/stable-restart
raft: Only call stableTo when we have ready entries or a snapshot.
This commit is contained in:
commit
8c4494a39d
@ -226,6 +226,7 @@ func (n *node) run(r *raft) {
|
||||
var readyc chan Ready
|
||||
var advancec chan struct{}
|
||||
var prevLastUnstablei uint64
|
||||
var havePrevLastUnstablei bool
|
||||
var rd Ready
|
||||
|
||||
lead := None
|
||||
@ -294,6 +295,7 @@ func (n *node) run(r *raft) {
|
||||
}
|
||||
if len(rd.Entries) > 0 {
|
||||
prevLastUnstablei = rd.Entries[len(rd.Entries)-1].Index
|
||||
havePrevLastUnstablei = true
|
||||
}
|
||||
if !IsEmptyHardState(rd.HardState) {
|
||||
prevHardSt = rd.HardState
|
||||
@ -302,6 +304,7 @@ func (n *node) run(r *raft) {
|
||||
prevSnapi = rd.Snapshot.Index
|
||||
if prevSnapi > prevLastUnstablei {
|
||||
prevLastUnstablei = prevSnapi
|
||||
havePrevLastUnstablei = true
|
||||
}
|
||||
}
|
||||
r.msgs = nil
|
||||
@ -310,7 +313,10 @@ func (n *node) run(r *raft) {
|
||||
if prevHardSt.Commit != 0 {
|
||||
r.raftLog.appliedTo(prevHardSt.Commit)
|
||||
}
|
||||
r.raftLog.stableTo(prevLastUnstablei)
|
||||
if havePrevLastUnstablei {
|
||||
r.raftLog.stableTo(prevLastUnstablei)
|
||||
havePrevLastUnstablei = false
|
||||
}
|
||||
advancec = nil
|
||||
case <-n.stop:
|
||||
close(n.done)
|
||||
|
@ -336,7 +336,7 @@ func TestNodeStart(t *testing.T) {
|
||||
select {
|
||||
case rd := <-n.Ready():
|
||||
t.Errorf("unexpected Ready: %+v", rd)
|
||||
default:
|
||||
case <-time.After(time.Millisecond):
|
||||
}
|
||||
}
|
||||
|
||||
@ -364,7 +364,7 @@ func TestNodeRestart(t *testing.T) {
|
||||
select {
|
||||
case rd := <-n.Ready():
|
||||
t.Errorf("unexpected Ready: %+v", rd)
|
||||
default:
|
||||
case <-time.After(time.Millisecond):
|
||||
}
|
||||
}
|
||||
|
||||
@ -432,12 +432,12 @@ func TestNodeAdvance(t *testing.T) {
|
||||
select {
|
||||
case rd := <-n.Ready():
|
||||
t.Fatalf("unexpected Ready before Advance: %+v", rd)
|
||||
default:
|
||||
case <-time.After(time.Millisecond):
|
||||
}
|
||||
n.Advance()
|
||||
select {
|
||||
case <-n.Ready():
|
||||
default:
|
||||
case <-time.After(time.Millisecond):
|
||||
t.Errorf("expect Ready after Advance, but there is no Ready available")
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user