Stop reconcile loop when error has been repeated more than 15 times
This commit is contained in:
parent
2264e11a6d
commit
a408112875
|
|
@ -135,8 +135,6 @@ func (bar *BackupAndRestore) Restore(jenkinsClient jenkinsclient.Jenkins) error
|
|||
return bar.k8sClient.Update(context.TODO(), jenkins)
|
||||
}
|
||||
|
||||
//TODO after 3 fails stop
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -163,8 +161,6 @@ func (bar *BackupAndRestore) Backup() error {
|
|||
return bar.k8sClient.Update(context.TODO(), jenkins)
|
||||
}
|
||||
|
||||
//TODO after 3 fails stop
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,6 +42,13 @@ const (
|
|||
reasonCRValidationFailure event.Reason = "CRValidationFailure"
|
||||
)
|
||||
|
||||
type reconcileError struct {
|
||||
err error
|
||||
counter uint64
|
||||
}
|
||||
|
||||
var reconcileErrors = map[string]reconcileError{}
|
||||
|
||||
// Add creates a new Jenkins Controller and adds it to the Manager. The Manager will set fields on the Controller
|
||||
// and Start it when the Manager is Started.
|
||||
func Add(mgr manager.Manager, local, minikube bool, events event.Recorder, clientSet kubernetes.Clientset, config rest.Config) error {
|
||||
|
|
@ -120,6 +127,30 @@ func (r *ReconcileJenkins) Reconcile(request reconcile.Request) (reconcile.Resul
|
|||
if err != nil && apierrors.IsConflict(err) {
|
||||
return reconcile.Result{Requeue: true}, nil
|
||||
} else if err != nil {
|
||||
lastErrors, found := reconcileErrors[request.Name]
|
||||
if found {
|
||||
if err.Error() == lastErrors.err.Error() {
|
||||
lastErrors.counter++
|
||||
} else {
|
||||
lastErrors.counter = 1
|
||||
lastErrors.err = err
|
||||
}
|
||||
} else {
|
||||
lastErrors = reconcileError{
|
||||
err: err,
|
||||
counter: 1,
|
||||
}
|
||||
}
|
||||
reconcileErrors[request.Name] = lastErrors
|
||||
if lastErrors.counter >= 15 {
|
||||
if log.Debug {
|
||||
logger.V(log.VWarn).Info(fmt.Sprintf("Reconcile loop failed ten times with the same error, giving up: %+v", err))
|
||||
} else {
|
||||
logger.V(log.VWarn).Info(fmt.Sprintf("Reconcile loop failed ten times with the same error, giving up: %s", err))
|
||||
}
|
||||
return reconcile.Result{Requeue: false}, nil
|
||||
}
|
||||
|
||||
if log.Debug {
|
||||
logger.V(log.VWarn).Info(fmt.Sprintf("Reconcile loop failed: %+v", err))
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue