Skip to content

Error pushing files on S3 after version 1.35.99 of boto3 #1279

@cmadjar

Description

@cmadjar

boto3 introduced a fun breaking change that results in the following error:

Uploading assembly/587630/V1/mri/native/demo_587630_V1_t1_001.mnc to https://s3.msi.umn.edu/lorisrb
Traceback (most recent call last):
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/boto3/s3/transfer.py", line 372, in upload_file
    future.result()
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/s3transfer/futures.py", line 111, in result
    return self._coordinator.result()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/s3transfer/futures.py", line 272, in result
    raise self._exception
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/httpsession.py", line 464, in send
    urllib_response = conn.urlopen(
                      ^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/urllib3/connectionpool.py", line 787, in urlopen
    response = self._make_request(
               ^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/urllib3/connectionpool.py", line 493, in _make_request
    conn.request(
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/awsrequest.py", line 96, in request
    rval = super().request(method, url, body, headers, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/urllib3/connection.py", line 449, in request
    for chunk in chunks:
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/urllib3/util/request.py", line 228, in chunk_readable
    datablock = body.read(blocksize)
                ^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/httpchecksum.py", line 198, in read
    self._remaining += self._make_chunk()
                       ^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/httpchecksum.py", line 214, in _make_chunk
    raw_chunk = self._raw.read(self._chunk_size)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/s3transfer/utils.py", line 526, in read
    data = self._fileobj.read(amount_to_read)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/s3transfer/upload.py", line 91, in read
    raise self._transfer_coordinator.exception
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/s3transfer/tasks.py", line 142, in __call__
    return self._execute_main(kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/s3transfer/tasks.py", line 165, in _execute_main
    return_value = self._main(**kwargs)
                   ^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/s3transfer/upload.py", line 825, in _main
    response = client.upload_part(
               ^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/client.py", line 570, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/client.py", line 1031, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (MissingContentLength) when calling the UploadPart operation: Unknown

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/Loris-MRI/bin/mri/python/scripts/run_push_imaging_files_to_s3_pipeline.py", line 63, in <module>
    main()
  File "/opt/Loris-MRI/bin/mri/python/scripts/run_push_imaging_files_to_s3_pipeline.py", line 59, in main
    PushImagingFilesToS3Pipeline(loris_getopt_obj, os.path.basename(__file__[:-3]))
  File "/opt/Loris-MRI/bin/mri/python/lib/dcm2bids_imaging_pipeline_lib/push_imaging_files_to_s3_pipeline.py", line 56, in __init__
    self._upload_files_to_s3()
  File "/opt/Loris-MRI/bin/mri/python/lib/dcm2bids_imaging_pipeline_lib/push_imaging_files_to_s3_pipeline.py", line 232, in _upload_files_to_s3
    self.s3_obj.upload_file(file_full_path, file["s3_link"])
  File "/opt/Loris-MRI/bin/mri/python/lib/aws_s3.py", line 113, in upload_file
    s3_bucket.upload_file(file_name, s3_file_name)
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/boto3/s3/inject.py", line 266, in bucket_upload_file
    return self.meta.client.upload_file(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/boto3/s3/inject.py", line 175, in upload_file
    return transfer.upload_file(
           ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/Loris-MRI/bin/mri/python_virtualenvs/loris-mri-python/lib/python3.11/site-packages/boto3/s3/transfer.py", line 378, in upload_file
    raise S3UploadFailedError(
boto3.exceptions.S3UploadFailedError: Failed to upload /data/Loris-MRI/data/assembly/587630/V1/mri/native/demo_587630_V1_t1_001.mnc to lorisrb/assembly/587630/V1/mri/native/demo_587630_V1_t1_001.mnc: An error occurred (MissingContentLength) when calling the UploadPart operation: Unknown

Last working version of boto3 with our pipeline is 1.35.99. Need to find a fix so that our pipeline works on newer versions of boto3

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions