Browse Source

Merge pull request #6475 from fanminshi/leaseparallel

etcdserver: parallelize expired leases process
fanmin shi 9 years ago
parent
commit
b586060812
1 changed files with 16 additions and 2 deletions
  1. 16 2
      etcdserver/server.go

+ 16 - 2
etcdserver/server.go

@@ -81,6 +81,9 @@ const (
 	maxInFlightMsgSnap = 16
 	maxInFlightMsgSnap = 16
 
 
 	releaseDelayAfterSnapshot = 30 * time.Second
 	releaseDelayAfterSnapshot = 30 * time.Second
+
+	// maxPendingRevokes is the maximum number of outstanding expired lease revocations.
+	maxPendingRevokes = 16
 )
 )
 
 
 var (
 var (
@@ -619,8 +622,19 @@ func (s *EtcdServer) run() {
 			sched.Schedule(f)
 			sched.Schedule(f)
 		case leases := <-expiredLeaseC:
 		case leases := <-expiredLeaseC:
 			s.goAttach(func() {
 			s.goAttach(func() {
-				for _, l := range leases {
-					s.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: int64(l.ID)})
+				// Increases throughput of expired leases deletion process through parallelization
+				c := make(chan struct{}, maxPendingRevokes)
+				for _, lease := range leases {
+					select {
+					case c <- struct{}{}:
+					case <-s.stopping:
+						return
+					}
+					lid := lease.ID
+					s.goAttach(func() {
+						s.LeaseRevoke(context.TODO(), &pb.LeaseRevokeRequest{ID: int64(lid)})
+						<-c
+					})
 				}
 				}
 			})
 			})
 		case err := <-s.errorc:
 		case err := <-s.errorc: