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 (
"context"
"fmt"
"github.com/pkg/errors"
appsv1 "k8s.io/api/apps/v1"
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 {
c.log("Job is failed: %s/%s", job.GetNamespace(), job.GetName())
// 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 {
c.log("Job is not completed: %s/%s", job.GetNamespace(), job.GetName())

@ -38,6 +38,8 @@ import (
"k8s.io/apimachinery/pkg/util/wait"
)
var ErrNoRetryError = errors.New("this error will stop retry")
type waiter struct {
c ReadyChecker
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)
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)
return true
}

Loading…
Cancel
Save