Skip to content

Commit 0fb8cd4

Browse files
authored
[SYNPY-1198] Handle S3 upload errors by retrying without ACL for IBM buckets (#1239)
* handle S3 upload errors by retrying without ACL for IBM buckets
1 parent b6b2d2e commit 0fb8cd4

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

synapseclient/core/remote_file_storage_wrappers.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ def upload_file(
194194

195195
S3ClientWrapper._attempt_import_boto3()
196196
import boto3.s3.transfer
197+
from boto3.exceptions import S3UploadFailedError
197198

198199
transfer_config = boto3.s3.transfer.TransferConfig(
199200
**(transfer_config_kwargs or {})
@@ -222,13 +223,27 @@ def upload_file(
222223
)
223224

224225
# automatically determines whether to perform multi-part upload
225-
s3.Bucket(bucket).upload_file(
226-
upload_file_path,
227-
remote_file_key,
228-
Callback=progress_callback,
229-
Config=transfer_config,
230-
ExtraArgs={"ACL": "bucket-owner-full-control"},
231-
)
226+
try:
227+
s3.Bucket(bucket).upload_file(
228+
upload_file_path,
229+
remote_file_key,
230+
Callback=progress_callback,
231+
Config=transfer_config,
232+
ExtraArgs={"ACL": "bucket-owner-full-control"},
233+
)
234+
except S3UploadFailedError as upload_error:
235+
if "Invalid canned ACL" in str(upload_error):
236+
s3.Bucket(bucket).upload_file(
237+
upload_file_path,
238+
remote_file_key,
239+
Callback=progress_callback,
240+
Config=transfer_config,
241+
# https://sagebionetworks.jira.com/browse/SYNPY-1198
242+
# IBM Based buckets enforce this by default, and does not support this additional setting
243+
# ExtraArgs={"ACL": "bucket-owner-full-control"},
244+
)
245+
else:
246+
raise upload_error
232247
if progress_bar is not None:
233248
progress_bar.close()
234249
return upload_file_path

0 commit comments

Comments
 (0)