From ffe306d67958297202e9492ea644b42c0e7e694d Mon Sep 17 00:00:00 2001 From: Mayuka Channankaiah <57181320+mayuka-c@users.noreply.github.com> Date: Thu, 24 Jul 2025 20:26:27 +0530 Subject: [PATCH] client-go, kubectl: Replace deprecated ErrWaitTimeout with recommended method (#132718) * client-go: Replace depracted ErrWaitTimeout with recommended method * Fix UT and Integration tests * IT test --- .../src/k8s.io/client-go/tools/watch/retrywatcher_test.go | 2 +- staging/src/k8s.io/client-go/tools/watch/until.go | 2 +- staging/src/k8s.io/client-go/tools/watch/until_test.go | 4 ++-- staging/src/k8s.io/client-go/util/certificate/csr/csr.go | 8 ++++---- staging/src/k8s.io/client-go/util/retry/util.go | 2 +- .../client-go/util/workqueue/delaying_queue_test.go | 2 +- staging/src/k8s.io/kubectl/pkg/cmd/wait/condition.go | 2 +- staging/src/k8s.io/kubectl/pkg/cmd/wait/delete.go | 2 +- test/integration/apimachinery/watch_restart_test.go | 2 +- test/integration/client/exec_test.go | 3 +-- 10 files changed, 14 insertions(+), 15 deletions(-) diff --git a/staging/src/k8s.io/client-go/tools/watch/retrywatcher_test.go b/staging/src/k8s.io/client-go/tools/watch/retrywatcher_test.go index 307b8da3335..b831cacec52 100644 --- a/staging/src/k8s.io/client-go/tools/watch/retrywatcher_test.go +++ b/staging/src/k8s.io/client-go/tools/watch/retrywatcher_test.go @@ -595,7 +595,7 @@ func TestRetryWatcher(t *testing.T) { counter = atomic.LoadUint32(atomicCounter) return counter == tc.watchCount, nil }) - if err == wait.ErrWaitTimeout { + if wait.Interrupted(err) { t.Errorf("expected %d watcher starts, but it has started %d times", tc.watchCount, counter) } else if err != nil { t.Fatal(err) diff --git a/staging/src/k8s.io/client-go/tools/watch/until.go b/staging/src/k8s.io/client-go/tools/watch/until.go index 03ceaf002d2..7a9b34a8712 100644 --- a/staging/src/k8s.io/client-go/tools/watch/until.go +++ b/staging/src/k8s.io/client-go/tools/watch/until.go @@ -86,7 +86,7 @@ func UntilWithoutRetry(ctx context.Context, watcher watch.Interface, conditions } case <-ctx.Done(): - return lastEvent, wait.ErrWaitTimeout + return lastEvent, wait.ErrorInterrupted(nil) } } } diff --git a/staging/src/k8s.io/client-go/tools/watch/until_test.go b/staging/src/k8s.io/client-go/tools/watch/until_test.go index a9367a81817..d2194fbd0a4 100644 --- a/staging/src/k8s.io/client-go/tools/watch/until_test.go +++ b/staging/src/k8s.io/client-go/tools/watch/until_test.go @@ -116,7 +116,7 @@ func TestUntilMultipleConditionsFail(t *testing.T) { defer cancel() lastEvent, err := UntilWithoutRetry(ctx, fw, conditions...) - if err != wait.ErrWaitTimeout { + if !wait.Interrupted(err) { t.Fatalf("expected ErrWaitTimeout error, got %#v", err) } if lastEvent == nil { @@ -209,7 +209,7 @@ func TestUntilWithSync(t *testing.T) { conditionFunc: func(e watch.Event) (bool, error) { return true, nil }, - expectedErr: wait.ErrWaitTimeout, + expectedErr: wait.ErrorInterrupted(nil), expectedEvent: nil, }, { diff --git a/staging/src/k8s.io/client-go/util/certificate/csr/csr.go b/staging/src/k8s.io/client-go/util/certificate/csr/csr.go index 2b4dd4239ab..1cd996c02c5 100644 --- a/staging/src/k8s.io/client-go/util/certificate/csr/csr.go +++ b/staging/src/k8s.io/client-go/util/certificate/csr/csr.go @@ -202,7 +202,7 @@ func WaitForCertificate(ctx context.Context, client clientset.Interface, reqName // return if we've timed out if err := ctx.Err(); err != nil { - return nil, wait.ErrWaitTimeout + return nil, wait.ErrorInterrupted(nil) } // see if the v1beta1 API is available @@ -226,7 +226,7 @@ func WaitForCertificate(ctx context.Context, client clientset.Interface, reqName // return if we've timed out if err := ctx.Err(); err != nil { - return nil, wait.ErrWaitTimeout + return nil, wait.ErrorInterrupted(nil) } // wait and try again @@ -306,8 +306,8 @@ func WaitForCertificate(ctx context.Context, client clientset.Interface, reqName return false, nil }, ) - if err == wait.ErrWaitTimeout { - return nil, wait.ErrWaitTimeout + if wait.Interrupted(err) { + return nil, wait.ErrorInterrupted(nil) } if err != nil { return nil, formatError("cannot watch on the certificate signing request: %v", err) diff --git a/staging/src/k8s.io/client-go/util/retry/util.go b/staging/src/k8s.io/client-go/util/retry/util.go index 0c6e504a6dc..57d3cd49c15 100644 --- a/staging/src/k8s.io/client-go/util/retry/util.go +++ b/staging/src/k8s.io/client-go/util/retry/util.go @@ -59,7 +59,7 @@ func OnError(backoff wait.Backoff, retriable func(error) bool, fn func() error) return false, err } }) - if err == wait.ErrWaitTimeout { + if wait.Interrupted(err) { err = lastErr } return err diff --git a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go index 3c50709bee2..491040b2d93 100644 --- a/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go +++ b/staging/src/k8s.io/client-go/util/workqueue/delaying_queue_test.go @@ -60,7 +60,7 @@ func TestSimpleQueue(t *testing.T) { return false, nil }) - if err != wait.ErrWaitTimeout { + if !wait.Interrupted(err) { t.Errorf("expected timeout, got: %v", err) } diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/wait/condition.go b/staging/src/k8s.io/kubectl/pkg/cmd/wait/condition.go index 7dec0de2e46..8d1a7aaa1e4 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/wait/condition.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/wait/condition.go @@ -174,7 +174,7 @@ func getObjAndCheckCondition(ctx context.Context, info *resource.Info, o *WaitOp return err }) if err != nil { - if errors.Is(err, wait.ErrWaitTimeout) { // nolint:staticcheck // SA1019 + if wait.Interrupted(err) { // nolint:staticcheck // SA1019 return result, false, errWaitTimeoutWithName } return result, false, err diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/wait/delete.go b/staging/src/k8s.io/kubectl/pkg/cmd/wait/delete.go index f20cbb5e424..c9b8f9b1a0d 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/wait/delete.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/wait/delete.go @@ -113,7 +113,7 @@ func IsDeleted(ctx context.Context, info *resource.Info, o *WaitOptions) (runtim return err }) if err != nil { - if errors.Is(err, wait.ErrWaitTimeout) { // nolint:staticcheck // SA1019 + if wait.Interrupted(err) { // nolint:staticcheck // SA1019 return gottenObj, false, errWaitTimeoutWithName } return gottenObj, false, err diff --git a/test/integration/apimachinery/watch_restart_test.go b/test/integration/apimachinery/watch_restart_test.go index d6380b1b2d6..c2c1b2f368e 100644 --- a/test/integration/apimachinery/watch_restart_test.go +++ b/test/integration/apimachinery/watch_restart_test.go @@ -259,7 +259,7 @@ func TestWatchRestartsIfTimeoutNotReached(t *testing.T) { t.Fatalf("Watch should have timed out but it exited without an error!") } - if err != wait.ErrWaitTimeout && tc.succeed { + if !wait.Interrupted(err) && tc.succeed { t.Fatalf("Watch exited with error: %v!", err) } diff --git a/test/integration/client/exec_test.go b/test/integration/client/exec_test.go index b9616b80889..8c872e90295 100644 --- a/test/integration/client/exec_test.go +++ b/test/integration/client/exec_test.go @@ -21,7 +21,6 @@ import ( "crypto/tls" "crypto/x509" "encoding/base64" - "errors" "fmt" "net" "net/http" @@ -608,7 +607,7 @@ func (is *informerSpy) waitForEvents(t *testing.T, wantEvents bool) { t.Fatalf("wanted events, but got error: %v", err) } } else { - if !errors.Is(err, wait.ErrWaitTimeout) { + if !wait.Interrupted(err) { if err != nil { t.Fatalf("wanted no events, but got error: %v", err) } else {