Browse Source

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.
Xiang Li 9 years ago
parent
commit
f2eb8560ed
1 changed files with 10 additions and 5 deletions
  1. 10 5
      raft/node_test.go

+ 10 - 5
raft/node_test.go

@@ -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