Skip to content

Commit

Permalink
resource/aws_s3_bucket_object: Minor standardization of read-after-cr…
Browse files Browse the repository at this point in the history
…eate logic, add CHANGELOG for #17236

Output from acceptance testing in AWS Commercial:

```
--- PASS: TestAccAWSS3BucketObject_acl (149.28s)
--- PASS: TestAccAWSS3BucketObject_content (55.47s)
--- PASS: TestAccAWSS3BucketObject_contentBase64 (56.32s)
--- PASS: TestAccAWSS3BucketObject_defaultBucketSSE (59.92s)
--- PASS: TestAccAWSS3BucketObject_empty (43.51s)
--- PASS: TestAccAWSS3BucketObject_etagEncryption (55.44s)
--- PASS: TestAccAWSS3BucketObject_ignoreTags (49.17s)
--- PASS: TestAccAWSS3BucketObject_kms (56.66s)
--- PASS: TestAccAWSS3BucketObject_metadata (117.12s)
--- PASS: TestAccAWSS3BucketObject_noNameNoKey (13.28s)
--- PASS: TestAccAWSS3BucketObject_NonVersioned (55.95s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockLegalHoldStartWithNone (150.69s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockLegalHoldStartWithOn (94.45s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockRetentionStartWithNone (138.35s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockRetentionStartWithSet (173.42s)
--- PASS: TestAccAWSS3BucketObject_source (40.22s)
--- PASS: TestAccAWSS3BucketObject_sse (40.00s)
--- PASS: TestAccAWSS3BucketObject_storageClass (185.50s)
--- PASS: TestAccAWSS3BucketObject_tags (146.46s)
--- PASS: TestAccAWSS3BucketObject_tagsLeadingMultipleSlashes (162.23s)
--- PASS: TestAccAWSS3BucketObject_tagsLeadingSingleSlash (163.67s)
--- PASS: TestAccAWSS3BucketObject_tagsMultipleSlashes (164.13s)
--- PASS: TestAccAWSS3BucketObject_updates (92.91s)
--- PASS: TestAccAWSS3BucketObject_updateSameFile (98.47s)
--- PASS: TestAccAWSS3BucketObject_updatesWithVersioning (91.82s)
--- PASS: TestAccAWSS3BucketObject_updatesWithVersioningViaAccessPoint (115.35s)
--- PASS: TestAccAWSS3BucketObject_withContentCharacteristics (39.88s)
```

Output from acceptance testing in AWS GovCloud (US):

```
--- PASS: TestAccAWSS3BucketObject_acl (133.53s)
--- PASS: TestAccAWSS3BucketObject_content (72.98s)
--- PASS: TestAccAWSS3BucketObject_contentBase64 (55.80s)
--- PASS: TestAccAWSS3BucketObject_defaultBucketSSE (79.15s)
--- PASS: TestAccAWSS3BucketObject_empty (56.26s)
--- PASS: TestAccAWSS3BucketObject_etagEncryption (73.86s)
--- PASS: TestAccAWSS3BucketObject_ignoreTags (113.53s)
--- PASS: TestAccAWSS3BucketObject_kms (73.81s)
--- PASS: TestAccAWSS3BucketObject_metadata (96.90s)
--- PASS: TestAccAWSS3BucketObject_noNameNoKey (13.58s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockLegalHoldStartWithNone (134.48s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockLegalHoldStartWithOn (82.00s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockRetentionStartWithNone (97.82s)
--- PASS: TestAccAWSS3BucketObject_ObjectLockRetentionStartWithSet (124.65s)
--- PASS: TestAccAWSS3BucketObject_source (56.30s)
--- PASS: TestAccAWSS3BucketObject_sse (64.91s)
--- PASS: TestAccAWSS3BucketObject_storageClass (170.44s)
--- PASS: TestAccAWSS3BucketObject_tags (126.19s)
--- PASS: TestAccAWSS3BucketObject_tagsLeadingMultipleSlashes (155.33s)
--- PASS: TestAccAWSS3BucketObject_tagsLeadingSingleSlash (161.70s)
--- PASS: TestAccAWSS3BucketObject_tagsMultipleSlashes (156.13s)
--- PASS: TestAccAWSS3BucketObject_updates (106.26s)
--- PASS: TestAccAWSS3BucketObject_updateSameFile (106.70s)
--- PASS: TestAccAWSS3BucketObject_updatesWithVersioning (112.11s)
--- PASS: TestAccAWSS3BucketObject_updatesWithVersioningViaAccessPoint (114.20s)
--- PASS: TestAccAWSS3BucketObject_withContentCharacteristics (56.20s)
--- SKIP: TestAccAWSS3BucketObject_NonVersioned (1.53s)
```
  • Loading branch information
bflad committed Mar 30, 2021
1 parent fb8cdc6 commit 55a1e0a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 10 deletions.
3 changes: 3 additions & 0 deletions .changelog/17236.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
resource/aws_s3_bucket_object: Handle read-after-create eventual consistency
```
23 changes: 13 additions & 10 deletions aws/resource_aws_s3_bucket_object.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
"github.com/mitchellh/go-homedir"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/keyvaluetags"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/tfresource"
)

const s3BucketObjectCreationTimeout = 2 * time.Minute
Expand Down Expand Up @@ -313,9 +314,10 @@ func resourceAwsS3BucketObjectRead(d *schema.ResourceData, meta interface{}) err
}

var resp *s3.HeadObjectOutput
var err error

err = resource.Retry(s3BucketObjectCreationTimeout, func() *resource.RetryError {
err := resource.Retry(s3BucketObjectCreationTimeout, func() *resource.RetryError {
var err error

resp, err = s3conn.HeadObject(input)

if d.IsNewResource() && isAWSErrRequestFailureStatusCode(err, 404) {
Expand All @@ -329,19 +331,20 @@ func resourceAwsS3BucketObjectRead(d *schema.ResourceData, meta interface{}) err
return nil
})

if isResourceTimeoutError(err) {
if tfresource.TimedOut(err) {
resp, err = s3conn.HeadObject(input)
}

if !d.IsNewResource() && isAWSErrRequestFailureStatusCode(err, 404) {
log.Printf("[WARN] S3 Object (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
}

if err != nil {
// If S3 returns a 404 Request Failure, mark the object as destroyed
if isAWSErrRequestFailureStatusCode(err, 404) {
d.SetId("")
log.Printf("[WARN] Error Reading Object (%s), object not found (HTTP status 404)", key)
return nil
}
return err
return fmt.Errorf("error reading S3 Object (%s): %w", d.Id(), err)
}

log.Printf("[DEBUG] Reading S3 Bucket Object meta: %s", resp)

d.Set("cache_control", resp.CacheControl)
Expand Down

0 comments on commit 55a1e0a

Please sign in to comment.