From d50f1968a91ee1124f0c72560781eec254857f8a Mon Sep 17 00:00:00 2001 From: justinsb Date: Sat, 10 Feb 2024 14:29:45 -0500 Subject: [PATCH] deletion: tolerate concurrent SQS queue deletion Ignore the not-found error. --- cloudmock/aws/mocksqs/api.go | 3 ++- pkg/resources/aws/sqs.go | 11 ++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cloudmock/aws/mocksqs/api.go b/cloudmock/aws/mocksqs/api.go index cef1262638..9315dfb516 100644 --- a/cloudmock/aws/mocksqs/api.go +++ b/cloudmock/aws/mocksqs/api.go @@ -21,6 +21,7 @@ import ( "sync" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/request" "github.com/aws/aws-sdk-go/service/sqs" "github.com/aws/aws-sdk-go/service/sqs/sqsiface" ) @@ -109,6 +110,6 @@ func (m *MockSQS) ListQueueTags(input *sqs.ListQueueTagsInput) (*sqs.ListQueueTa return response, nil } -func (m *MockSQS) DeleteQueue(*sqs.DeleteQueueInput) (*sqs.DeleteQueueOutput, error) { +func (m *MockSQS) DeleteQueueWithContext(aws.Context, *sqs.DeleteQueueInput, ...request.Option) (*sqs.DeleteQueueOutput, error) { panic("Not implemented") } diff --git a/pkg/resources/aws/sqs.go b/pkg/resources/aws/sqs.go index bd59339eaf..3601360303 100644 --- a/pkg/resources/aws/sqs.go +++ b/pkg/resources/aws/sqs.go @@ -17,6 +17,7 @@ limitations under the License. package aws import ( + "context" "fmt" "strings" @@ -39,6 +40,7 @@ func DumpSQSQueue(op *resources.DumpOperation, r *resources.Resource) error { } func DeleteSQSQueue(cloud fi.Cloud, r *resources.Resource) error { + ctx := context.TODO() c := cloud.(awsup.AWSCloud) url := r.ID @@ -47,9 +49,12 @@ func DeleteSQSQueue(cloud fi.Cloud, r *resources.Resource) error { request := &sqs.DeleteQueueInput{ QueueUrl: &url, } - _, err := c.SQS().DeleteQueue(request) - if err != nil { - return fmt.Errorf("error deleting SQS queue %q: %v", url, err) + if _, err := c.SQS().DeleteQueueWithContext(ctx, request); err != nil { + if awsup.AWSErrorCode(err) == "AWS.SimpleQueueService.NonExistentQueue" { + // Concurrently deleted + return nil + } + return fmt.Errorf("error deleting SQS queue %q: %w", url, err) } return nil }