From 0088a9e6a8c47b2710fc49b82a912861cda8a554 Mon Sep 17 00:00:00 2001 From: Michael Gugino Date: Mon, 21 Oct 2019 15:21:26 -0400 Subject: [PATCH] Add timeout info to kubectl drain logging --- staging/src/k8s.io/kubectl/pkg/drain/drain.go | 10 +++++----- staging/src/k8s.io/kubectl/pkg/drain/drain_test.go | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/staging/src/k8s.io/kubectl/pkg/drain/drain.go b/staging/src/k8s.io/kubectl/pkg/drain/drain.go index 3c1ebeef9ef..a941b74935a 100644 --- a/staging/src/k8s.io/kubectl/pkg/drain/drain.go +++ b/staging/src/k8s.io/kubectl/pkg/drain/drain.go @@ -210,7 +210,7 @@ func (d *Helper) evictPods(pods []corev1.Pod, policyGroupVersion string, getPodF select { case <-ctx.Done(): // 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 default: } @@ -228,7 +228,7 @@ func (d *Helper) evictPods(pods []corev1.Pod, policyGroupVersion string, getPodF 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 { returnCh <- nil } else { @@ -270,11 +270,11 @@ func (d *Helper) deletePods(pods []corev1.Pod, getPodFn func(namespace, name str } } 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 } -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) { pendingPods := []corev1.Pod{} for i, pod := range pods { @@ -294,7 +294,7 @@ func waitForDelete(ctx context.Context, pods []corev1.Pod, interval, timeout tim if len(pendingPods) > 0 { select { case <-ctx.Done(): - return false, fmt.Errorf("global timeout") + return false, fmt.Errorf("global timeout reached: %v", globalTimeout) default: return false, nil } diff --git a/staging/src/k8s.io/kubectl/pkg/drain/drain_test.go b/staging/src/k8s.io/kubectl/pkg/drain/drain_test.go index 1693079ff13..d6ecca17212 100644 --- a/staging/src/k8s.io/kubectl/pkg/drain/drain_test.go +++ b/staging/src/k8s.io/kubectl/pkg/drain/drain_test.go @@ -20,6 +20,7 @@ import ( "context" "errors" "fmt" + "math" "os" "reflect" "sort" @@ -107,7 +108,7 @@ func TestDeletePods(t *testing.T) { t.Run(test.description, func(t *testing.T) { _, pods := createPods(false) 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 err == nil {