Merge pull request #29100 from wojtek-t/pods_can_never_be_scheduled_again

Automatic merge from submit-queue

Fix disappearing pods in scheduler

Fix #29098
This commit is contained in:
k8s-merge-robot 2016-07-19 03:26:16 -07:00 committed by GitHub
commit b0bcb8f7b2

View File

@ -48,6 +48,8 @@ import (
const (
SchedulerAnnotationKey = "scheduler.alpha.kubernetes.io/name"
initialGetBackoff = 100 * time.Millisecond
maximalGetBackoff = time.Minute
)
// ConfigFactory knows how to fill out a scheduler config with its support functions.
@ -531,12 +533,20 @@ func (factory *ConfigFactory) makeDefaultErrorFunc(backoff *podBackoff, podQueue
}
// Get the pod again; it may have changed/been scheduled already.
pod = &api.Pod{}
err := factory.Client.Get().Namespace(podID.Namespace).Resource("pods").Name(podID.Name).Do().Into(pod)
if err != nil {
if !errors.IsNotFound(err) {
glog.Errorf("Error getting pod %v for retry: %v; abandoning", podID, err)
getBackoff := initialGetBackoff
for {
if err := factory.Client.Get().Namespace(podID.Namespace).Resource("pods").Name(podID.Name).Do().Into(pod); err == nil {
break
}
return
if errors.IsNotFound(err) {
glog.Warning("A pod %v no longer exists", podID)
return
}
glog.Errorf("Error getting pod %v for retry: %v; retrying...", podID, err)
if getBackoff = getBackoff * 2; getBackoff > maximalGetBackoff {
getBackoff = maximalGetBackoff
}
time.Sleep(getBackoff)
}
if pod.Spec.NodeName == "" {
podQueue.AddIfNotPresent(pod)