@@ -349,26 +349,34 @@ func (r *resourceReconciler) cleanup(
349349 defer exit (err )
350350
351351 rlog .Enter ("rm.ReadOne" )
352- latest , err := rm .ReadOne (ctx , current )
352+ observed , err := rm .ReadOne (ctx , current )
353353 rlog .Exit ("rm.ReadOne" , err )
354354 if err != nil {
355355 if err == ackerr .NotFound {
356356 // If the aws resource is not found, remove finalizer
357- return r .setResourceUnmanaged (ctx , latest )
357+ return r .setResourceUnmanaged (ctx , current )
358358 }
359359 return err
360360 }
361361 rlog .Enter ("rm.Delete" )
362- err = rm .Delete (ctx , latest )
362+ latest , err : = rm .Delete (ctx , observed )
363363 rlog .Exit ("rm.Delete" , err )
364+ if latest != nil {
365+ // The Delete operation is likely asynchronous and has likely set a Status
366+ // field on the returned CR to something like `deleting`. Here, we patchResource()
367+ // in order to save these Status field modifications.
368+ _ = r .patchResource (ctx , current , latest )
369+ }
364370 if err != nil {
371+ // NOTE: Delete() implementations that have asynchronously-completing
372+ // deletions should return a RequeueNeededAfter.
365373 return err
366374 }
367375
368376 // Now that external AWS service resources have been appropriately cleaned
369377 // up, we remove the finalizer representing the CR is managed by ACK,
370378 // allowing the CR to be deleted by the Kubernetes API server
371- if err = r .setResourceUnmanaged (ctx , latest ); err != nil {
379+ if err = r .setResourceUnmanaged (ctx , current ); err != nil {
372380 return err
373381 }
374382 rlog .Info ("deleted resource" )
0 commit comments