MinIO: InvalidCredsError when trying to retrieve an object
- Dominant language
- Python
- Stars
- 2.1k
- Forks
- 931
- Avg merge
- 1d 2h
- Merged PRs (30d)
- 4
Description
## Summary
When using the `minio` provider and getting an object, the method raises an `libcloud.common.types.InvalidCredsError`, despite the fact that it was able to create a container and upload it the object (so it doesn't look like a credential issue)
100% repro, code to repro the bug is provided
## Detailed Information
libcloud: latest stable, 3.3.1
Python: 3.8.10
OS: Ubuntu 20.04
Here you can find a repo to repro the bug, using `pytest` (Actually there are 2 bugs to report):
https://github.com/Wenzel/libcloud_bug
~~~python3
$ pytest -k test_demo_InvalidCreds
__________________________________________________________________________________________ test_demo_InvalidCreds ___________________________________________________________________________________________
clean_minio_db = , tmp_path = PosixPath('/tmp/pytest-of-wenzel/pytest-22/test_demo_InvalidCreds0')
def test_demo_InvalidCreds(clean_minio_db, tmp_path):
# setup
expected_data = b"data"
with open(tmp_path / "file1.txt", "wb") as f:
f.write(expected_data)
adapter = clean_minio_db
c = adapter.create_container("objects")
# test
ret = adapter.upload_object(tmp_path / "file1.txt", c, "file1")
> obj = adapter.get_object(c, "file1")
tests/test_demo_bug.py:31:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../.cache/pypoetry/virtualenvs/libcloud-bug-IT-EyGKG-py3.8/lib/python3.8/site-packages/libcloud/storage/drivers/s3.py:370: in get_object
response = self.connection.request(object_path, method='HEAD')
../../.cache/pypoetry/virtualenvs/libcloud-bug-IT-EyGKG-py3.8/lib/python3.8/site-packages/libcloud/common/base.py:655: in request
response = responseCls(**kwargs)
../../.cache/pypoetry/virtualenvs/libcloud-bug-IT-EyGKG-py3.8/lib/python3.8/site-packages/libcloud/common/base.py:166: in __init__
message=self.parse_error(),
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self =
def parse_error(self):
if self.status in [httplib.UNAUTHORIZED, httplib.FORBIDDEN]:
> raise InvalidCredsError(self.body)
E libcloud.common.types.InvalidCredsError: ''
../../.cache/pypoetry/virtualenvs/libcloud-bug-IT-EyGKG-py3.8/lib/python3.8/site-packages/libcloud/storage/drivers/s3.py:138: InvalidCredsError
------------------------------------------------------------------------------------------- Captured stdout setup -------------------------------------------------------------------------------------------
ca19a7e29a92d875ec58b0285c854403ae5a95433a71e084011d32018a9141d1
----------------------------------------------------------------------------------------- Captured stdout teardown ------------------------------------------------------------------------------------------
libcloud_bug_objectmistmatch_miniodb
========================================================================================== short test summary info ==========================================================================================
FAILED tests/test_demo_bug.py::test_demo_InvalidCreds - libcloud.common.types.InvalidCredsError: ''
~~~
Thanks for your help !
Contributor guide
Research direction
Start with tests/test_demo_bug.py and reproduce the failure using pytest -k test_demo_InvalidCreds. Trace MinIO get_object through s3.py, especially S3Response.parse_error and the HEAD request, then add regression coverage showing that retrieving the uploaded object does not raise InvalidCredsError while genuine credential failures remain identifiable.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cloud
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100