From 706e90a0339fae592a3854849548a5c2010b90ab Mon Sep 17 00:00:00 2001 From: Jun Gong Date: Fri, 13 Dec 2019 09:40:50 +0800 Subject: [PATCH] Skip scheduling the pod if it has been assumed and the pod updates could be skipped. --- pkg/scheduler/scheduler.go | 23 ++++++++++++++++++++--- pkg/scheduler/scheduler_test.go | 6 ++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 2e0dc546b22..fc3863bc91f 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -599,9 +599,7 @@ func (sched *Scheduler) scheduleOne(ctx context.Context) { return } pod := podInfo.Pod - if pod.DeletionTimestamp != nil { - sched.Recorder.Eventf(pod, nil, v1.EventTypeWarning, "FailedScheduling", "Scheduling", "skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name) - klog.V(3).Infof("Skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name) + if sched.skipPodSchedule(pod) { return } @@ -764,6 +762,25 @@ func (sched *Scheduler) scheduleOne(ctx context.Context) { }() } +// skipPodSchedule returns true if we could skip scheduling the pod for specified cases. +func (sched *Scheduler) skipPodSchedule(pod *v1.Pod) bool { + // Case 1: pod is being deleted. + if pod.DeletionTimestamp != nil { + sched.Recorder.Eventf(pod, nil, v1.EventTypeWarning, "FailedScheduling", "Scheduling", "skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name) + klog.V(3).Infof("Skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name) + return true + } + + // Case 2: pod has been assumed and pod updates could be skipped. + // An assumed pod can be added again to the scheduling queue if it got an update event + // during its previous scheduling cycle but before getting assumed. + if sched.skipPodUpdate(pod) { + return true + } + + return false +} + type podConditionUpdaterImpl struct { Client clientset.Interface } diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index 1bb26fe59e8..1343abe3d2d 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -309,6 +309,12 @@ func TestScheduler(t *testing.T) { AssumeFunc: func(pod *v1.Pod) { gotAssumedPod = pod }, + IsAssumedPodFunc: func(pod *v1.Pod) bool { + if pod == nil || gotAssumedPod == nil { + return false + } + return pod.UID == gotAssumedPod.UID + }, } s := &Scheduler{