diff --git a/go.mod b/go.mod index b68c9ef0..0dcf0921 100644 --- a/go.mod +++ b/go.mod @@ -31,9 +31,9 @@ require ( golang.org/x/sys v0.26.0 gopkg.in/evanphx/json-patch.v4 v4.12.0 k8s.io/api v0.0.0-20241011135352-a432ebea6002 - k8s.io/apimachinery v0.0.0-20241011134855-ee6d9667b400 + k8s.io/apimachinery v0.0.0-20241012054809-2b29434a8c7f k8s.io/cli-runtime v0.0.0-20241011145636-a38d5abff693 - k8s.io/client-go v0.0.0-20241011140021-64f5574f09ee + k8s.io/client-go v0.0.0-20241014015924-9cff3e43bde3 k8s.io/component-base v0.0.0-20241011141534-5f571d319450 k8s.io/component-helpers v0.0.0-20241011141825-7b6fde1148bd k8s.io/klog/v2 v2.130.1 diff --git a/go.sum b/go.sum index c0b201b9..d6441041 100644 --- a/go.sum +++ b/go.sum @@ -213,12 +213,12 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= k8s.io/api v0.0.0-20241011135352-a432ebea6002 h1:RvGxsDUWpmBJSDbSf4VxbU+ITNerDQ/xYIF7xjK9NsA= k8s.io/api v0.0.0-20241011135352-a432ebea6002/go.mod h1:KfoQfYB8K80kj2ZJhrj/CwEwZSAkQYsRFP+xICkEFLk= -k8s.io/apimachinery v0.0.0-20241011134855-ee6d9667b400 h1:WJ70KEsKGuWl+K2pEqyC0xY436+4pNQvWknw6wOY9bk= -k8s.io/apimachinery v0.0.0-20241011134855-ee6d9667b400/go.mod h1:y/FzDt/GaPgPceo5rJcCtD4qW5l8SwtbzESSMGEY6P8= +k8s.io/apimachinery v0.0.0-20241012054809-2b29434a8c7f h1:LR+BiqgooGKRUEJhODAP/pjyB+w+Y+CMYg6e0M5ok0k= +k8s.io/apimachinery v0.0.0-20241012054809-2b29434a8c7f/go.mod h1:y/FzDt/GaPgPceo5rJcCtD4qW5l8SwtbzESSMGEY6P8= k8s.io/cli-runtime v0.0.0-20241011145636-a38d5abff693 h1:iAMHRpOeM49eghvCeXraPq74JrURm3as94wOzQSjTzk= k8s.io/cli-runtime v0.0.0-20241011145636-a38d5abff693/go.mod h1:0vghq0zr9PDOH9fNAtLmpuQo1kafr4lVlElXhJLttuI= -k8s.io/client-go v0.0.0-20241011140021-64f5574f09ee h1:fMnowvfj0lE9cimUeO4RVAu82GS8phWh1flFr31geGQ= -k8s.io/client-go v0.0.0-20241011140021-64f5574f09ee/go.mod h1:19gUihItqYL1EFf5ypVP9XBmdFDz3Uk+npRTnsyM7Cg= +k8s.io/client-go v0.0.0-20241014015924-9cff3e43bde3 h1:X3fef6ODHumKO/OgkKFeKr28VWQDMZHcpl9yKz1zBmA= +k8s.io/client-go v0.0.0-20241014015924-9cff3e43bde3/go.mod h1:U/n+PIH+4FltkenaqEKdlSEQfRMWr319haj1X8kvGXM= k8s.io/component-base v0.0.0-20241011141534-5f571d319450 h1:reGtStlX3/j46f6heqGEH/igNt/suQ3Q88yNTyoBUKk= k8s.io/component-base v0.0.0-20241011141534-5f571d319450/go.mod h1:C4UDhaaaw1voy7R+17HoW6ld/rFpiPCUu/UH0wTffAE= k8s.io/component-helpers v0.0.0-20241011141825-7b6fde1148bd h1:JpSEBi/GIFNXkKXOOX9iuCRWqlG/ZDFYS2r2Hk3moyc= diff --git a/pkg/drain/drain.go b/pkg/drain/drain.go index 3633f3c4..348fd703 100644 --- a/pkg/drain/drain.go +++ b/pkg/drain/drain.go @@ -413,7 +413,10 @@ func (d *Helper) deletePods(pods []corev1.Pod, getPodFn func(namespace, name str func waitForDelete(params waitForDeleteParams) ([]corev1.Pod, error) { pods := params.pods - err := wait.PollImmediate(params.interval, params.timeout, func() (bool, error) { + if params.ctx == nil { + params.ctx = context.Background() + } + err := wait.PollUntilContextTimeout(params.ctx, params.interval, params.timeout, true, func(ctx context.Context) (done bool, err error) { pendingPods := []corev1.Pod{} for i, pod := range pods { p, err := params.getPodFn(pod.Namespace, pod.Name) @@ -440,15 +443,7 @@ func waitForDelete(params waitForDeleteParams) ([]corev1.Pod, error) { } } pods = pendingPods - if len(pendingPods) > 0 { - select { - case <-params.ctx.Done(): - return false, fmt.Errorf("global timeout reached: %v", params.globalTimeout) - default: - return false, nil - } - } - return true, nil + return len(pods) == 0, nil }) return pods, err } diff --git a/pkg/drain/drain_test.go b/pkg/drain/drain_test.go index 6ca4fe6d..6acf2489 100644 --- a/pkg/drain/drain_test.go +++ b/pkg/drain/drain_test.go @@ -36,7 +36,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes/fake" ktest "k8s.io/client-go/testing" ) @@ -101,7 +100,7 @@ func TestDeletePods(t *testing.T) { timeout: 3 * time.Second, expectPendingPods: true, expectError: true, - expectedError: &wait.ErrWaitTimeout, + expectedError: &context.DeadlineExceeded, getPodFn: func(namespace, name string) (*corev1.Pod, error) { oldPodMap, _ := createPods(false) if oldPod, found := oldPodMap[name]; found { @@ -117,7 +116,7 @@ func TestDeletePods(t *testing.T) { ctxTimeoutEarly: true, expectPendingPods: true, expectError: true, - expectedError: &wait.ErrWaitTimeout, + expectedError: &context.Canceled, getPodFn: func(namespace, name string) (*corev1.Pod, error) { oldPodMap, _ := createPods(false) if oldPod, found := oldPodMap[name]; found {