Skip to content

Commit 26b52e8

Browse files
authored
Merge pull request kubernetes#86230 from hex108/skip_schedule
Scheduler handles pod annotation updates during scheduling more gracefully
2 parents 6b5cf90 + 706e90a commit 26b52e8

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

pkg/scheduler/scheduler.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -599,9 +599,7 @@ func (sched *Scheduler) scheduleOne(ctx context.Context) {
599599
return
600600
}
601601
pod := podInfo.Pod
602-
if pod.DeletionTimestamp != nil {
603-
sched.Recorder.Eventf(pod, nil, v1.EventTypeWarning, "FailedScheduling", "Scheduling", "skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name)
604-
klog.V(3).Infof("Skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name)
602+
if sched.skipPodSchedule(pod) {
605603
return
606604
}
607605

@@ -764,6 +762,25 @@ func (sched *Scheduler) scheduleOne(ctx context.Context) {
764762
}()
765763
}
766764

765+
// skipPodSchedule returns true if we could skip scheduling the pod for specified cases.
766+
func (sched *Scheduler) skipPodSchedule(pod *v1.Pod) bool {
767+
// Case 1: pod is being deleted.
768+
if pod.DeletionTimestamp != nil {
769+
sched.Recorder.Eventf(pod, nil, v1.EventTypeWarning, "FailedScheduling", "Scheduling", "skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name)
770+
klog.V(3).Infof("Skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name)
771+
return true
772+
}
773+
774+
// Case 2: pod has been assumed and pod updates could be skipped.
775+
// An assumed pod can be added again to the scheduling queue if it got an update event
776+
// during its previous scheduling cycle but before getting assumed.
777+
if sched.skipPodUpdate(pod) {
778+
return true
779+
}
780+
781+
return false
782+
}
783+
767784
type podConditionUpdaterImpl struct {
768785
Client clientset.Interface
769786
}

pkg/scheduler/scheduler_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,12 @@ func TestScheduler(t *testing.T) {
291291
AssumeFunc: func(pod *v1.Pod) {
292292
gotAssumedPod = pod
293293
},
294+
IsAssumedPodFunc: func(pod *v1.Pod) bool {
295+
if pod == nil || gotAssumedPod == nil {
296+
return false
297+
}
298+
return pod.UID == gotAssumedPod.UID
299+
},
294300
}
295301

296302
s := &Scheduler{

0 commit comments

Comments
 (0)