From b92b0eb7c20d979337c44b3b56bc8c2c01948927 Mon Sep 17 00:00:00 2001 From: goodluckbot Date: Mon, 8 Apr 2019 15:31:48 +0800 Subject: [PATCH] Change Mutex to RWMutex for pod backoff --- pkg/scheduler/internal/queue/pod_backoff.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/scheduler/internal/queue/pod_backoff.go b/pkg/scheduler/internal/queue/pod_backoff.go index 964650ac081..de332802f04 100644 --- a/pkg/scheduler/internal/queue/pod_backoff.go +++ b/pkg/scheduler/internal/queue/pod_backoff.go @@ -26,7 +26,7 @@ import ( // PodBackoffMap is a structure that stores backoff related information for pods type PodBackoffMap struct { // lock for performing actions on this PodBackoffMap - lock sync.Mutex + lock sync.RWMutex // initial backoff duration initialDuration time.Duration // maximal backoff duration @@ -49,8 +49,8 @@ func NewPodBackoffMap(initialDuration, maxDuration time.Duration) *PodBackoffMap // GetBackoffTime returns the time that nsPod completes backoff func (pbm *PodBackoffMap) GetBackoffTime(nsPod ktypes.NamespacedName) (time.Time, bool) { - pbm.lock.Lock() - defer pbm.lock.Unlock() + pbm.lock.RLock() + defer pbm.lock.RUnlock() if _, found := pbm.podAttempts[nsPod]; found == false { return time.Time{}, false } @@ -63,8 +63,8 @@ func (pbm *PodBackoffMap) GetBackoffTime(nsPod ktypes.NamespacedName) (time.Time // TryBackoffAndWait tries to perform backoff for a non-preempting pod. // it is invoked from factory.go if util.PodPriorityEnabled() returns false. func (pbm *PodBackoffMap) TryBackoffAndWait(nsPod ktypes.NamespacedName, stop <-chan struct{}) bool { - pbm.lock.Lock() - defer pbm.lock.Unlock() + pbm.lock.RLock() + defer pbm.lock.RUnlock() backoffDuration := pbm.calculateBackoffDuration(nsPod) select { case <-time.After(backoffDuration):