Skip to content

Commit 3917df2

Browse files
modular-magicianemilymye
authored andcommitted
Add retry for storage bucket 412 (#3434) (#2011)
* add retry for storage bucket 412 * format Signed-off-by: Modular Magician <[email protected]>
1 parent 4a8ddb6 commit 3917df2

File tree

3 files changed

+12
-2
lines changed

3 files changed

+12
-2
lines changed

.changelog/3434.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
storage: Added retries for `google_storage_bucket_iam_*` on 412 (precondition not met) errors for eventually consistent bucket creation.
3+
```

google-beta/error_retry_predicates.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,10 @@ func isNotFoundRetryableError(opType string) RetryErrorPredicateFunc {
215215
return false, ""
216216
}
217217
}
218+
219+
func isStoragePreconditionError(err error) (bool, string) {
220+
if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 412 {
221+
return true, fmt.Sprintf("Retry on storage precondition not met")
222+
}
223+
return false, ""
224+
}

google-beta/iam_storage_bucket.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (u *StorageBucketIamUpdater) GetResourceIamPolicy() (*cloudresourcemanager.
102102
return nil, err
103103
}
104104

105-
policy, err := sendRequest(u.Config, "GET", "", url, obj)
105+
policy, err := sendRequest(u.Config, "GET", "", url, obj, isStoragePreconditionError)
106106
if err != nil {
107107
return nil, errwrap.Wrapf(fmt.Sprintf("Error retrieving IAM policy for %s: {{err}}", u.DescribeResource()), err)
108108
}
@@ -129,7 +129,7 @@ func (u *StorageBucketIamUpdater) SetResourceIamPolicy(policy *cloudresourcemana
129129
return err
130130
}
131131

132-
_, err = sendRequestWithTimeout(u.Config, "PUT", "", url, obj, u.d.Timeout(schema.TimeoutCreate))
132+
_, err = sendRequestWithTimeout(u.Config, "PUT", "", url, obj, u.d.Timeout(schema.TimeoutCreate), isStoragePreconditionError)
133133
if err != nil {
134134
return errwrap.Wrapf(fmt.Sprintf("Error setting IAM policy for %s: {{err}}", u.DescribeResource()), err)
135135
}

0 commit comments

Comments
 (0)