Browse Source

leases: Move lease sorting outside of lock

Because the leases were sorted inside UnsafeLeases() the lessor mutex
ended up being locked while the whole map was sorted. This pulls the
soring outside of the lock, per feedback on
https://github.com/coreos/etcd/pull/9699
Micah Gates 7 years ago
parent
commit
aa02ceb2e5
1 changed files with 2 additions and 1 deletions
  1. 2 1
      lease/lessor.go

+ 2 - 1
lease/lessor.go

@@ -335,7 +335,6 @@ func (le *lessor) unsafeLeases() []*Lease {
 	for _, l := range le.leaseMap {
 	for _, l := range le.leaseMap {
 		leases = append(leases, l)
 		leases = append(leases, l)
 	}
 	}
-	sort.Sort(leasesByExpiry(leases))
 	return leases
 	return leases
 }
 }
 
 
@@ -343,6 +342,7 @@ func (le *lessor) Leases() []*Lease {
 	le.mu.RLock()
 	le.mu.RLock()
 	ls := le.unsafeLeases()
 	ls := le.unsafeLeases()
 	le.mu.RUnlock()
 	le.mu.RUnlock()
+	sort.Sort(leasesByExpiry(ls))
 	return ls
 	return ls
 }
 }
 
 
@@ -366,6 +366,7 @@ func (le *lessor) Promote(extend time.Duration) {
 
 
 	// adjust expiries in case of overlap
 	// adjust expiries in case of overlap
 	leases := le.unsafeLeases()
 	leases := le.unsafeLeases()
+	sort.Sort(leasesByExpiry(leases))
 
 
 	baseWindow := leases[0].Remaining()
 	baseWindow := leases[0].Remaining()
 	nextWindow := baseWindow + time.Second
 	nextWindow := baseWindow + time.Second