فهرست منبع

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 10 سال پیش
والد
کامیت
f2eb8560ed
1فایلهای تغییر یافته به همراه10 افزوده شده و 5 حذف شده
  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