@@ -244,12 +244,27 @@ func (r *SelfNodeRemediationReconciler) ReconcileManager(ctx context.Context, re
244244 //This remediation is no longer relevant, most likely because fixed by a different remediator.
245245 if snr .GetDeletionTimestamp () != nil {
246246 //Removing finalizer so NHC deletion of the remediation can be completed
247- r .logger .Info ("Removing finalizer of timed-out remediation deleted by NHC" , "remediation name" , snr .GetName ())
248- return ctrl.Result {}, r .removeFinalizer (snr )
247+ r .logger .Info ("Cleaning up a timed-out remediation which is deleted by NHC" , "remediation name" , snr .GetName ())
248+
249+ //Node found, cleanup Taints before removing the finlizer
250+ if node , err := r .getNodeFromSnr (ctx , snr ); err == nil {
251+ if taintErr := r .removeOutOfServiceTaint (node ); taintErr != nil {
252+ return ctrl.Result {}, taintErr
253+ }
254+ return r .recoverNode (node , snr )
255+ } else if apiErrors .IsNotFound (err ) {
256+ //Node doesn't exist, potentially removed by another remediator such as MDR
257+ return ctrl.Result {}, r .removeFinalizer (snr )
258+ } else {
259+ // report an error
260+ r .logger .Error (err , "failed to get node" , "remediation name" , snr .Name )
261+ return ctrl.Result {}, err
262+ }
263+ } else {
264+ r .logger .Info ("NHC added the timed-out annotation, remediation will be stopped" )
265+ events .RemediationStoppedByNHC (r .Recorder , snr )
266+ return ctrl.Result {}, r .updateConditions (remediationTimeoutByNHC , snr )
249267 }
250- r .logger .Info ("NHC added the timed-out annotation, remediation will be stopped" )
251- events .RemediationStoppedByNHC (r .Recorder , snr )
252- return ctrl.Result {}, r .updateConditions (remediationTimeoutByNHC , snr )
253268 }
254269
255270 if r .getPhase (snr ) != fencingCompletedPhase {
0 commit comments