Skip to content

Commit 4eeee42

Browse files
author
Kumar Gaurav Sharma
committed
Provide custom resource delete progress for long running delete
1 parent 089321f commit 4eeee42

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

mocks/pkg/types/aws_resource_manager.go

Lines changed: 14 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/runtime/reconciler.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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")

pkg/types/aws_resource_manager.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ type AWSResourceManager interface {
5959
) (AWSResource, error)
6060

6161
// Delete attempts to destroy the supplied AWSResource in the backend AWS
62-
// service API.
63-
Delete(context.Context, AWSResource) error
62+
// service API, returning an AWSResource representing the
63+
// resource being deleted (if delete is asynchronous and takes time)
64+
Delete(context.Context, AWSResource) (AWSResource, error)
6465
// ARNFromName returns an AWS Resource Name from a given string name. This
6566
// is useful for constructing ARNs for APIs that require ARNs in their
6667
// GetAttributes operations but all we have (for new CRs at least) is a

0 commit comments

Comments
 (0)