raft: fix TestNodeProposeAddDuplicateNode

Only send signal after applying conf change.
Or deadlock might happen if raft node receives
ready without conf change when the test server
is slow.
release-3.1
Xiang Li 2016-11-20 21:59:28 -08:00
parent 859142033f
commit f2eb8560ed
1 changed files with 10 additions and 5 deletions

View File

@ -303,7 +303,8 @@ func TestNodeProposeAddDuplicateNode(t *testing.T) {
ticker := time.NewTicker(time.Millisecond * 100)
done := make(chan struct{})
stop := make(chan struct{})
applyChan := make(chan struct{})
applyConfChan := make(chan struct{})
go func() {
defer close(done)
for {
@ -322,25 +323,29 @@ func TestNodeProposeAddDuplicateNode(t *testing.T) {
var cc raftpb.ConfChange
cc.Unmarshal(e.Data)
n.ApplyConfChange(cc)
applyConfChan <- struct{}{}
}
}
n.Advance()
applyChan <- struct{}{}
}
}
}()
cc1 := raftpb.ConfChange{Type: raftpb.ConfChangeAddNode, NodeID: 1}
ccdata1, _ := cc1.Marshal()
n.ProposeConfChange(context.TODO(), cc1)
<-applyChan
<-applyConfChan
// try add the same node again
n.ProposeConfChange(context.TODO(), cc1)
<-applyChan
<-applyConfChan
// the new node join should be ok
cc2 := raftpb.ConfChange{Type: raftpb.ConfChangeAddNode, NodeID: 2}
ccdata2, _ := cc2.Marshal()
n.ProposeConfChange(context.TODO(), cc2)
<-applyChan
<-applyConfChan
close(stop)
<-done