@@ -18,6 +18,9 @@ import (
1818const (
1919 configMapCreateTimeout = 30 * time .Second
2020 podCreateTimeout = 90 * time .Second
21+ podPendingTimeout = 20 // 20 Iterations
22+ fastPoll = 5 * time .Second
23+ slowPoll = 15 * time .Second
2124
2225 resultsPort = 8000
2326 resultsPortName = "results"
@@ -111,7 +114,7 @@ func (r *Runner) createPod() (pod *kubev1.Pod, err error) {
111114 return nil , fmt .Errorf ("error creating ConfigMap: %v" , err )
112115 }
113116
114- err = wait .PollImmediate (5 * time . Second , configMapCreateTimeout , func () (done bool , err error ) {
117+ err = wait .PollImmediate (fastPoll , configMapCreateTimeout , func () (done bool , err error ) {
115118 if configMap , err = r .Kube .CoreV1 ().ConfigMaps (r .Namespace ).Get (configMap .Name , metav1.GetOptions {}); err != nil {
116119 log .Printf ("Error creating %s config map: %v" , configMap .Name , err )
117120 }
@@ -144,7 +147,7 @@ func (r *Runner) createPod() (pod *kubev1.Pod, err error) {
144147
145148 // retry until Pod can be created or timeout occurs
146149 var createdPod * kubev1.Pod
147- err = wait .PollImmediate (5 * time . Second , podCreateTimeout , func () (done bool , err error ) {
150+ err = wait .PollImmediate (fastPoll , podCreateTimeout , func () (done bool , err error ) {
148151 if createdPod , err = r .Kube .CoreV1 ().Pods (r .Namespace ).Create (pod ); err != nil {
149152 log .Printf ("Error creating %s runner Pod: %v" , r .Name , err )
150153 }
@@ -154,17 +157,22 @@ func (r *Runner) createPod() (pod *kubev1.Pod, err error) {
154157}
155158
156159func (r * Runner ) waitForPodRunning (pod * kubev1.Pod ) error {
157- return wait .PollImmediate (10 * time .Second , 3 * time .Minute , func () (done bool , err error ) {
160+ var pendingCount int = 0
161+ return wait .PollImmediate (fastPoll , 3 * time .Minute , func () (done bool , err error ) {
158162 pod , err = r .Kube .CoreV1 ().Pods (pod .Namespace ).Get (pod .Name , metav1.GetOptions {})
159163 if err != nil && ! kerror .IsNotFound (err ) {
160164 return
161165 } else if pod == nil {
162166 err = errors .New ("pod can't be nil" )
163- } else if pod .Status .Phase == kubev1 .PodFailed {
164- err = errors . New ("failed waiting for Pod: the Pod has failed" )
167+ } else if pod .Status .Phase == kubev1 .PodFailed || pod . Status . Phase == kubev1 . PodUnknown {
168+ err = fmt . Errorf ("failed waiting for Pod: the Pod has a phase of %s" , pod . Status . Phase )
165169 } else if pod .Status .Phase == kubev1 .PodRunning {
166170 done = true
167171 } else {
172+ pendingCount ++
173+ if pendingCount > podPendingTimeout {
174+ err = errors .New ("timed out waiting for pod to start" )
175+ }
168176 r .Printf ("Waiting for Pod '%s/%s' to start Running..." , pod .Namespace , pod .Name )
169177 }
170178 return
0 commit comments