@@ -156,7 +156,8 @@ func (pr *PatroniCoreReconciler) Reconcile(ctx context.Context, request ctrl.Req
156156 newResVersion := cr .ResourceVersion
157157 newCrHash := util .HashJson (cr .Spec )
158158 if (pr .resVersions [cr .Name ] == newResVersion ||
159- pr .crHash == newCrHash ) && len (cr .Status .Conditions ) != 0 && cr .Status .Conditions [0 ].Type != Failed {
159+ pr .crHash == newCrHash ) && (len (cr .Status .Conditions ) != 0 &&
160+ (cr .Status .Conditions [0 ].Type != Failed || (cr .Status .Conditions [0 ].Type == Failed && pr .errorCounter == 0 ))) {
160161 areCredsChanged , err := manager .AreCredsChanged (credentials .PostgresSecretNames )
161162 if err != nil {
162163 return reconcile.Result {}, err
@@ -203,6 +204,7 @@ func (pr *PatroniCoreReconciler) Reconcile(ctx context.Context, request ctrl.Req
203204 return pr .handleReconcileError (maxReconcileAttempts ,
204205 "CanNotActualizeCredsOnCluster" ,
205206 newCrHash ,
207+ "Error during actualization of creds on cluster" ,
206208 err )
207209 }
208210
@@ -212,12 +214,13 @@ func (pr *PatroniCoreReconciler) Reconcile(ctx context.Context, request ctrl.Req
212214 switch err .(type ) {
213215 case * deployerrors.TestsError :
214216 {
215- return pr .handleTestReconcileError ( err , "Error during tests run" , maxReconcileAttempts , newCrHash )
217+ return pr .handleReconcileError ( maxReconcileAttempts , "ReconcilePostgresServiceClusterFailed" , " Error during tests run" , newCrHash , err )
216218 }
217219 case error :
218220 {
219221 return pr .handleReconcileError (maxReconcileAttempts ,
220222 "ReconcilePostgresServiceClusterFailed" ,
223+ "Error during reconcile cycle" ,
221224 newCrHash ,
222225 err )
223226 }
@@ -253,12 +256,13 @@ func (pr *PatroniCoreReconciler) Reconcile(ctx context.Context, request ctrl.Req
253256 switch err .(type ) {
254257 case * deployerrors.TestsError :
255258 {
256- return pr .handleTestReconcileError ( err , "Error during tests run" , maxReconcileAttempts , newCrHash )
259+ return pr .handleReconcileError ( maxReconcileAttempts , "ReconcilePatroniCoreClusterFailed" , " Error during tests run" , newCrHash , err )
257260 }
258261 case error :
259262 {
260263 return pr .handleReconcileError (maxReconcileAttempts ,
261264 "ReconcilePatroniCoreClusterFailed" ,
265+ "Error during reconcile cycle" ,
262266 newCrHash ,
263267 err )
264268 }
@@ -368,23 +372,6 @@ func (pr *PatroniCoreReconciler) stanzaUpgrade(create bool) error {
368372 return nil
369373}
370374
371- func (pr * PatroniCoreReconciler ) handleTestReconcileError (err error , errMsg string , maxReconcileAttempts int , newCrHash string ) (ctrl.Result , error ) {
372- pr .errorCounter ++
373- if pr .errorCounter < maxReconcileAttempts {
374- pr .logger .Error (errMsg , zap .Error (err ))
375- pr .logger .Error (fmt .Sprintf ("Error counter for tests run: %d, let's try to run the reconcile again" , pr .errorCounter ))
376- pr .reason = "PatroniCoreTestsFailed"
377- pr .message = "PatroniCore service reconcile cycle failed"
378- if err := pr .updateStatus (Failed , "PatroniCoreTestsFailed" , err .Error ()); err != nil {
379- pr .logger .Error ("Cannot update CR status" , zap .Error (err ))
380- return reconcile.Result {RequeueAfter : time .Minute }, err
381- }
382- return reconcile.Result {}, err
383- }
384- pr .logger .Error ("Reconciliation cycle failed due to test pod ended with error" )
385- return pr .stopReconcile (newCrHash , err )
386- }
387-
388375func (pr * PatroniCoreReconciler ) reconcilePatroniCoreCluster (cr * qubershipv1.PatroniCore ) error {
389376 consulRegistrationRequired := true
390377 // reconcile Patroni
@@ -527,25 +514,33 @@ func (pr *PatroniCoreReconciler) createTestsPods(cr *qubershipv1.PatroniCore) er
527514 return nil
528515}
529516
530- func (pr * PatroniCoreReconciler ) stopReconcile (newCrHash string , err error ) (ctrl.Result , error ) {
517+ func (pr * PatroniCoreReconciler ) stopReconcile (newCrHash string , reason string , err error ) (ctrl.Result , error ) {
531518 pr .logger .Error (fmt .Sprintf ("Failed reconcile attempts: %d, updating crHash, resVersions" , pr .errorCounter ))
532519 pr .crHash = newCrHash
533520 pr .errorCounter = 0
534- return reconcile. Result { RequeueAfter : time . Minute } , err
521+ return pr . failReconcile ( reason , err , false )
535522}
536523
537- func (pr * PatroniCoreReconciler ) handleReconcileError (maxAttempts int , reason , newCrHash string , err error ) (ctrl.Result , error ) {
524+ func (pr * PatroniCoreReconciler ) handleReconcileError (maxAttempts int , reason , errMsg , newCrHash string , err error ) (ctrl.Result , error ) {
538525 pr .errorCounter ++
539526 if pr .errorCounter < maxAttempts {
527+ pr .logger .Error (errMsg , zap .Error (err ))
540528 pr .logger .Error (fmt .Sprintf ("Error counter: %d, let's try to run the reconcile again" , pr .errorCounter ))
541- pr .reason = reason
542- pr .message = "PatroniCore service reconcile cycle failed"
543- if err := pr .updateStatus (Failed , reason ,
544- fmt .Sprintf ("Postgres service reconcile cycle failed. Error: %s" , err .Error ())); err != nil {
545- pr .logger .Error ("Cannot update CR status" , zap .Error (err ))
546- return reconcile.Result {RequeueAfter : time .Minute }, err
547- }
548- return reconcile.Result {RequeueAfter : time .Minute }, err
529+ return pr .failReconcile (reason , err , true )
530+ }
531+ return pr .stopReconcile (newCrHash , "No reconcile attempts left" , err )
532+ }
533+
534+ func (pr * PatroniCoreReconciler ) failReconcile (reason string , err error , requeue bool ) (ctrl.Result , error ) {
535+ pr .reason = reason
536+ pr .message = "PatroniCore service reconcile cycle failed"
537+ if err := pr .updateStatus (Failed , reason ,
538+ fmt .Sprintf ("Postgres service reconcile cycle failed. Error: %s" , err .Error ())); err != nil {
539+ pr .logger .Error ("Cannot update CR status" , zap .Error (err ))
540+ }
541+ requireAfter := time .Duration (0 )
542+ if requeue {
543+ requireAfter = time .Minute
549544 }
550- return pr . stopReconcile ( newCrHash , err )
545+ return reconcile. Result { RequeueAfter : requireAfter , Requeue : requeue }, err
551546}
0 commit comments