Add timeout info to kubectl drain logging

This commit is contained in:
Michael Gugino 2019-10-21 15:21:26 -04:00
parent 0e8998a040
commit 0088a9e6a8
2 changed files with 7 additions and 6 deletions

View File

@ -210,7 +210,7 @@ func (d *Helper) evictPods(pods []corev1.Pod, policyGroupVersion string, getPodF
select { select {
case <-ctx.Done(): case <-ctx.Done():
// return here or we'll leak a goroutine. // return here or we'll leak a goroutine.
returnCh <- fmt.Errorf("error when evicting pod %q: global timeout", pod.Name) returnCh <- fmt.Errorf("error when evicting pod %q: global timeout reached: %v", pod.Name, globalTimeout)
return return
default: default:
} }
@ -228,7 +228,7 @@ func (d *Helper) evictPods(pods []corev1.Pod, policyGroupVersion string, getPodF
return return
} }
} }
_, err := waitForDelete(ctx, []corev1.Pod{pod}, 1*time.Second, time.Duration(math.MaxInt64), true, getPodFn, d.OnPodDeletedOrEvicted) _, err := waitForDelete(ctx, []corev1.Pod{pod}, 1*time.Second, time.Duration(math.MaxInt64), true, getPodFn, d.OnPodDeletedOrEvicted, globalTimeout)
if err == nil { if err == nil {
returnCh <- nil returnCh <- nil
} else { } else {
@ -270,11 +270,11 @@ func (d *Helper) deletePods(pods []corev1.Pod, getPodFn func(namespace, name str
} }
} }
ctx := context.TODO() ctx := context.TODO()
_, err := waitForDelete(ctx, pods, 1*time.Second, globalTimeout, false, getPodFn, d.OnPodDeletedOrEvicted) _, err := waitForDelete(ctx, pods, 1*time.Second, globalTimeout, false, getPodFn, d.OnPodDeletedOrEvicted, globalTimeout)
return err return err
} }
func waitForDelete(ctx context.Context, pods []corev1.Pod, interval, timeout time.Duration, usingEviction bool, getPodFn func(string, string) (*corev1.Pod, error), onDoneFn func(pod *corev1.Pod, usingEviction bool)) ([]corev1.Pod, error) { func waitForDelete(ctx context.Context, pods []corev1.Pod, interval, timeout time.Duration, usingEviction bool, getPodFn func(string, string) (*corev1.Pod, error), onDoneFn func(pod *corev1.Pod, usingEviction bool), globalTimeout time.Duration) ([]corev1.Pod, error) {
err := wait.PollImmediate(interval, timeout, func() (bool, error) { err := wait.PollImmediate(interval, timeout, func() (bool, error) {
pendingPods := []corev1.Pod{} pendingPods := []corev1.Pod{}
for i, pod := range pods { for i, pod := range pods {
@ -294,7 +294,7 @@ func waitForDelete(ctx context.Context, pods []corev1.Pod, interval, timeout tim
if len(pendingPods) > 0 { if len(pendingPods) > 0 {
select { select {
case <-ctx.Done(): case <-ctx.Done():
return false, fmt.Errorf("global timeout") return false, fmt.Errorf("global timeout reached: %v", globalTimeout)
default: default:
return false, nil return false, nil
} }

View File

@ -20,6 +20,7 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"math"
"os" "os"
"reflect" "reflect"
"sort" "sort"
@ -107,7 +108,7 @@ func TestDeletePods(t *testing.T) {
t.Run(test.description, func(t *testing.T) { t.Run(test.description, func(t *testing.T) {
_, pods := createPods(false) _, pods := createPods(false)
ctx := context.TODO() ctx := context.TODO()
pendingPods, err := waitForDelete(ctx, pods, test.interval, test.timeout, false, test.getPodFn, nil) pendingPods, err := waitForDelete(ctx, pods, test.interval, test.timeout, false, test.getPodFn, nil, time.Duration(math.MaxInt64))
if test.expectError { if test.expectError {
if err == nil { if err == nil {