From 23b9893f00caea7b11f7f54bfc5438eaae6e05d5 Mon Sep 17 00:00:00 2001 From: Isaac Bi Date: Thu, 15 Feb 2024 12:11:00 -0800 Subject: [PATCH 1/2] Add eventual consistency protection on queue policy attributes --- internal/service/sqs/attribute_funcs.go | 7 ++++--- internal/service/sqs/consts.go | 11 +++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/internal/service/sqs/attribute_funcs.go b/internal/service/sqs/attribute_funcs.go index 291cfd619b7..2060659e995 100644 --- a/internal/service/sqs/attribute_funcs.go +++ b/internal/service/sqs/attribute_funcs.go @@ -5,8 +5,6 @@ package sqs import ( "context" - "log" - "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/aws/aws-sdk-go-v2/service/sqs/types" @@ -18,6 +16,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/internal/verify" + "log" ) type queueAttributeHandler struct { @@ -43,7 +42,9 @@ func (h *queueAttributeHandler) Upsert(ctx context.Context, d *schema.ResourceDa QueueUrl: aws.String(url), } - _, err = conn.SetQueueAttributes(ctx, input) + _, err = tfresource.RetryWhenAWSErrMessageContains(ctx, propagationTimeout, func() (interface{}, error) { + return conn.SetQueueAttributes(ctx, input) + }, errCodeInvalidAttributeValue, "Invalid value for the parameter Policy") if err != nil { return diag.Errorf("setting SQS Queue (%s) attribute (%s): %s", url, h.AttributeName, err) diff --git a/internal/service/sqs/consts.go b/internal/service/sqs/consts.go index 47ed5224770..ea4200306d0 100644 --- a/internal/service/sqs/consts.go +++ b/internal/service/sqs/consts.go @@ -3,6 +3,12 @@ package sqs +import "time" + +const ( + propagationTimeout = 1 * time.Minute +) + const ( fifoQueueNameSuffix = ".fifo" ) @@ -41,6 +47,7 @@ func fifoThroughputLimit_Values() []string { } const ( - errCodeQueueDoesNotExist = "AWS.SimpleQueueService.NonExistentQueue" - errCodeQueueDeletedRecently = "AWS.SimpleQueueService.QueueDeletedRecently" + errCodeQueueDoesNotExist = "AWS.SimpleQueueService.NonExistentQueue" + errCodeQueueDeletedRecently = "AWS.SimpleQueueService.QueueDeletedRecently" + errCodeInvalidAttributeValue = "InvalidAttributeValue" ) From 05334b22bfcb7297d7b924cbfbe815330f8a1b14 Mon Sep 17 00:00:00 2001 From: Isaac Bi Date: Fri, 16 Feb 2024 11:18:05 -0800 Subject: [PATCH 2/2] Add CHANGELOG entry --- .changelog/35861.txt | 3 +++ internal/service/sqs/attribute_funcs.go | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .changelog/35861.txt diff --git a/.changelog/35861.txt b/.changelog/35861.txt new file mode 100644 index 00000000000..645eac267ca --- /dev/null +++ b/.changelog/35861.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_sqs_queue_policy: Retry IAM eventual consistency errors +``` \ No newline at end of file diff --git a/internal/service/sqs/attribute_funcs.go b/internal/service/sqs/attribute_funcs.go index 2060659e995..ddbb91c326b 100644 --- a/internal/service/sqs/attribute_funcs.go +++ b/internal/service/sqs/attribute_funcs.go @@ -5,6 +5,8 @@ package sqs import ( "context" + "log" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/sqs" "github.com/aws/aws-sdk-go-v2/service/sqs/types" @@ -16,7 +18,6 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/internal/verify" - "log" ) type queueAttributeHandler struct {