mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
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.
This commit is contained in:
parent
859142033f
commit
f2eb8560ed
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user