fsspec / fsspec/s3fs

A TypeError is raised while token expires during writing to S3

Open
#314 6 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
1k
Forks
305
Avg merge
22h 37m
Merged PRs (30d)
4

Description

This issue occurs when a STS token expires in the middle of writing to S3. An OSError: Write failed: TypeError("'NoneType' object is not subscriptable",) is raised instead of a PermissionError.

OSError: Write failed: TypeError("'NoneType' object is not subscriptable",)
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/pyarrow/parquet.py", line 1450, in
write_to_dataset write_table(subtable, f, **kwargs)
File "/usr/local/lib/python3.6/site-packages/pyarrow/parquet.py", line 1344, in
write_table writer.write_table(table, row_group_size=row_group_size)
File "/usr/local/lib/python3.6/site-packages/pyarrow/parquet.py", line 474, in
write_table self.writer.write_table(table, row_group_size=row_group_size)
File "pyarrow/_parquet.pyx", line 1375, in pyarrow._parquet.ParquetWriter.write_table File "pyarrow/error.pxi", line 80, in
pyarrow.lib.check_statuspyarrow.lib.ArrowIOError: Arrow error: IOError: The provided token has expired.. Detail: Python exception: PermissionError
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/s3fs/core.py", line 1096, in _upload_chunk PartNumber=part, UploadId=self.mpu['UploadId'],TypeError: 'NoneType' object is not subscriptable

environment is:
s3fs==0.4.0
boto3==1.10.27
botocore==1.13.27
pyarrow==0.15.1

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in s3fs/core.py at _upload_chunk, reported around line 1096, and reproduce the failure while an STS token expires during an S3 write. Compare the resulting TypeError with the expected PermissionError. Done means the token-expiry path reports PermissionError instead of the NoneType subscript error.

Written by the indexing model from the issue text.

Assessment

Tech stack
aws, python
Domain
cloud
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.