From c3bfb568f978c3dbe96ea465d2b5ceebd2b9c01d Mon Sep 17 00:00:00 2001 From: duc <1025434218@qq.com> Date: Thu, 27 Jan 2022 17:08:12 +0800 Subject: [PATCH 1/2] fix flushBackoffQCompleted: remove defer 'defer' is called in the 'for' loop, remove it --- pkg/scheduler/internal/queue/scheduling_queue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/scheduler/internal/queue/scheduling_queue.go b/pkg/scheduler/internal/queue/scheduling_queue.go index 6200dc801a3..095129ccd60 100644 --- a/pkg/scheduler/internal/queue/scheduling_queue.go +++ b/pkg/scheduler/internal/queue/scheduling_queue.go @@ -428,7 +428,7 @@ func (p *PriorityQueue) flushBackoffQCompleted() { } p.activeQ.Add(rawPodInfo) metrics.SchedulerQueueIncomingPods.WithLabelValues("active", BackoffComplete).Inc() - defer p.cond.Broadcast() + p.cond.Broadcast() } } From 040f8a4cf0afabe22df403a39eed18b2c711fdeb Mon Sep 17 00:00:00 2001 From: duc <1025434218@qq.com> Date: Thu, 27 Jan 2022 21:48:41 +0800 Subject: [PATCH 2/2] a flag to indicate whether or not to broadcast change the returns above to breaks, add a flag to indicate whether or not to broadcast. --- pkg/scheduler/internal/queue/scheduling_queue.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pkg/scheduler/internal/queue/scheduling_queue.go b/pkg/scheduler/internal/queue/scheduling_queue.go index 095129ccd60..d2edcfc861c 100644 --- a/pkg/scheduler/internal/queue/scheduling_queue.go +++ b/pkg/scheduler/internal/queue/scheduling_queue.go @@ -411,23 +411,28 @@ func (p *PriorityQueue) AddUnschedulableIfNotPresent(pInfo *framework.QueuedPodI func (p *PriorityQueue) flushBackoffQCompleted() { p.lock.Lock() defer p.lock.Unlock() + broadcast := false for { rawPodInfo := p.podBackoffQ.Peek() if rawPodInfo == nil { - return + break } pod := rawPodInfo.(*framework.QueuedPodInfo).Pod boTime := p.getBackoffTime(rawPodInfo.(*framework.QueuedPodInfo)) if boTime.After(p.clock.Now()) { - return + break } _, err := p.podBackoffQ.Pop() if err != nil { klog.ErrorS(err, "Unable to pop pod from backoff queue despite backoff completion", "pod", klog.KObj(pod)) - return + break } p.activeQ.Add(rawPodInfo) metrics.SchedulerQueueIncomingPods.WithLabelValues("active", BackoffComplete).Inc() + broadcast = true + } + + if broadcast { p.cond.Broadcast() } }