deletion: tolerate concurrent SQS queue deletion

Ignore the not-found error.
This commit is contained in:
justinsb 2024-02-10 14:29:45 -05:00
parent baae57afd5
commit d50f1968a9
2 changed files with 10 additions and 4 deletions

View File

@ -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")
}

View File

@ -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
}