From 1f3bc52eab44f98df0cfa41ae8f077ab60f94067 Mon Sep 17 00:00:00 2001 From: Chun Chen Date: Fri, 19 Jul 2019 10:53:19 +0800 Subject: [PATCH] Calling Unreserve plugin before recordSchedulingFailure in case of binding failure Calling recordSchedulingFailure puts the pod back to scheduling queue in another goroutine so pod may get a chance to be bond again before unreseve plugin cleaning state about it. --- pkg/scheduler/scheduler.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 4dd3c9c1d01..cf9b8ec71c7 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -443,8 +443,6 @@ func (sched *Scheduler) bind(assumed *v1.Pod, targetNode string, pluginContext * if err := sched.config.SchedulerCache.ForgetPod(assumed); err != nil { klog.Errorf("scheduler cache ForgetPod failed: %v", err) } - sched.recordSchedulingFailure(assumed, err, SchedulerError, - fmt.Sprintf("Binding rejected: %v", err)) return err } @@ -601,6 +599,7 @@ func (sched *Scheduler) scheduleOne() { metrics.PodScheduleErrors.Inc() // trigger un-reserve plugins to clean up state associated with the reserved Pod fwk.RunUnreservePlugins(pluginContext, assumedPod, scheduleResult.SuggestedHost) + sched.recordSchedulingFailure(assumedPod, err, SchedulerError, fmt.Sprintf("Binding rejected: %v", err)) } else { klog.V(2).Infof("pod %v/%v is bound successfully on node %v, %d nodes evaluated, %d nodes were found feasible", assumedPod.Namespace, assumedPod.Name, scheduleResult.SuggestedHost, scheduleResult.EvaluatedNodes, scheduleResult.FeasibleNodes) metrics.PodScheduleSuccesses.Inc()