fix(helm): No more retry if jobs failed beyond BackoffLimit

Signed-off-by: dayeguilaiye <979014041@qq.com>
pull/13364/head
dayeguilaiye 1 year ago
parent 159844e2c6
commit 3f4e27d481

@ -18,7 +18,7 @@ package kube // import "helm.sh/helm/v3/pkg/kube"
import ( import (
"context" "context"
"fmt" "github.com/pkg/errors"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta1 "k8s.io/api/apps/v1beta1"
@ -241,7 +241,7 @@ func (c *ReadyChecker) jobReady(job *batchv1.Job) (bool, error) {
if job.Status.Failed > *job.Spec.BackoffLimit { if job.Status.Failed > *job.Spec.BackoffLimit {
c.log("Job is failed: %s/%s", job.GetNamespace(), job.GetName()) c.log("Job is failed: %s/%s", job.GetNamespace(), job.GetName())
// If a job is failed, it can't recover, so throw an error // If a job is failed, it can't recover, so throw an error
return false, fmt.Errorf("job is failed: %s/%s", job.GetNamespace(), job.GetName()) return false, errors.Wrapf(ErrNoRetryError, "job is failed: %s/%s", job.GetNamespace(), job.GetName())
} }
if job.Spec.Completions != nil && job.Status.Succeeded < *job.Spec.Completions { if job.Spec.Completions != nil && job.Status.Succeeded < *job.Spec.Completions {
c.log("Job is not completed: %s/%s", job.GetNamespace(), job.GetName()) c.log("Job is not completed: %s/%s", job.GetNamespace(), job.GetName())

@ -38,6 +38,8 @@ import (
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
) )
var ErrNoRetryError = errors.New("this error will stop retry")
type waiter struct { type waiter struct {
c ReadyChecker c ReadyChecker
timeout time.Duration timeout time.Duration
@ -91,6 +93,10 @@ func (w *waiter) isRetryableError(err error, resource *resource.Info) bool {
w.log("Status code received: %d. Retryable error? %t", statusCode, retryable) w.log("Status code received: %d. Retryable error? %t", statusCode, retryable)
return retryable return retryable
} }
if errors.Is(err, ErrNoRetryError) {
w.log("The error is a NoRetryError, Retryable err? %t", false)
return false
}
w.log("Retryable error? %t", true) w.log("Retryable error? %t", true)
return true return true
} }

Loading…
Cancel
Save