Skip to content

Commit

Permalink
Make RDSPostgres/Aurora DBSnapshot delete operation Idempotent (#1107)
Browse files Browse the repository at this point in the history
* Log and Return nil If DBsnapshot is already deleted

* gofmt'ed the file

* Log and Return nil If DBClusterSnapshot is already deleted for aurora cluster in case of delete operation

* Minor typo fix

* Update pkg/function/delete_rds_snapshot.go

Co-authored-by: Pavan Navarathna <pavan@kasten.io>

* Update pkg/function/delete_rds_snapshot.go

Co-authored-by: Pavan Navarathna <pavan@kasten.io>

Co-authored-by: Pavan Navarathna <pavan@kasten.io>
  • Loading branch information
akankshakumari393 and pavannd1 committed Oct 1, 2021
1 parent 3f246af commit 74bf729
Showing 1 changed file with 24 additions and 5 deletions.
29 changes: 24 additions & 5 deletions pkg/function/delete_rds_snapshot.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ package function
import (
"context"

"github.com/aws/aws-sdk-go/aws/awserr"
awsrds "github.com/aws/aws-sdk-go/service/rds"
"github.com/pkg/errors"

kanister "github.com/kanisterio/kanister/pkg"
Expand Down Expand Up @@ -67,10 +69,18 @@ func deleteRDSSnapshot(ctx context.Context, snapshotID string, profile *param.Pr
if !isAuroraCluster(string(dbEngine)) {
// Delete Snapshot
log.Print("Deleting RDS snapshot", field.M{"SnapshotID": snapshotID})
if _, err := rdsCli.DeleteDBSnapshot(ctx, snapshotID); err != nil {
return nil, errors.Wrap(err, "Failed to delete snapshot")
_, err := rdsCli.DeleteDBSnapshot(ctx, snapshotID)
if err != nil {
if err, ok := err.(awserr.Error); ok {
switch err.Code() {
case awsrds.ErrCodeDBSnapshotNotFoundFault:
log.Info().Print("Could not find matching RDS snapshot; might have been deleted previously", field.M{"SnapshotId": snapshotID})
return nil, nil
default:
return nil, errors.Wrap(err, "Failed to delete snapshot")
}
}
}

// Wait until snapshot is deleted
log.Print("Waiting for RDS snapshot to be deleted", field.M{"SnapshotID": snapshotID})
err = rdsCli.WaitUntilDBSnapshotDeleted(ctx, snapshotID)
Expand All @@ -79,8 +89,17 @@ func deleteRDSSnapshot(ctx context.Context, snapshotID string, profile *param.Pr

// delete Aurora DB cluster snapshot
log.Print("Deleting Aurora DB cluster snapshot")
if _, err := rdsCli.DeleteDBClusterSnapshot(ctx, snapshotID); err != nil {
return nil, errors.Wrap(err, "Error deleting Aurora DB cluster snapshot")
_, err = rdsCli.DeleteDBClusterSnapshot(ctx, snapshotID)
if err != nil {
if err, ok := err.(awserr.Error); ok {
switch err.Code() {
case awsrds.ErrCodeDBClusterSnapshotNotFoundFault:
log.Info().Print("Could not find matching Aurora DB cluster snapshot; might have been deleted previously", field.M{"SnapshotId": snapshotID})
return nil, nil
default:
return nil, errors.Wrap(err, "Error deleting Aurora DB cluster snapshot")
}
}
}

log.Print("Waiting for Aurora DB cluster snapshot to be deleted")
Expand Down

0 comments on commit 74bf729

Please sign in to comment.