From 4d79030b8dcbce83920b9dfac8a1b9a26bc440c3 Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Wed, 14 Sep 2016 00:33:28 -0400 Subject: [PATCH] Exit scheduler retry loop correctly The error was being eaten and shadowed, which means we would never exit this loop. This might lead to a goroutine in the scheduler being used forever without exiting at maximum backoff. Switched to use the real client to make later refactors easier. --- plugin/pkg/scheduler/factory/factory.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin/pkg/scheduler/factory/factory.go b/plugin/pkg/scheduler/factory/factory.go index d5264223a53..89743e375ad 100644 --- a/plugin/pkg/scheduler/factory/factory.go +++ b/plugin/pkg/scheduler/factory/factory.go @@ -532,10 +532,13 @@ func (factory *ConfigFactory) makeDefaultErrorFunc(backoff *podBackoff, podQueue return } // Get the pod again; it may have changed/been scheduled already. - pod = &api.Pod{} getBackoff := initialGetBackoff for { - if err := factory.Client.Get().Namespace(podID.Namespace).Resource("pods").Name(podID.Name).Do().Into(pod); err == nil { + pod, err := factory.Client.Pods(podID.Namespace).Get(podID.Name) + if err == nil { + if len(pod.Spec.NodeName) == 0 { + podQueue.AddIfNotPresent(pod) + } break } if errors.IsNotFound(err) { @@ -548,9 +551,6 @@ func (factory *ConfigFactory) makeDefaultErrorFunc(backoff *podBackoff, podQueue } time.Sleep(getBackoff) } - if pod.Spec.NodeName == "" { - podQueue.AddIfNotPresent(pod) - } }() } }