apache / apache/libcloud

MinIO: InvalidCredsError when trying to retrieve an object

Ouverte
#1,608 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
api: storage drivers: minio stale
Langage dominant
Python
Étoiles
2.1k
Forks
931
Merge moyen
1 j 2 h
PR mergées (30 j)
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 !

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par tests/test_demo_bug.py et reproduisez l’échec avec pytest -k test_demo_InvalidCreds. Suivez MinIO get_object dans s3.py, en particulier S3Response.parse_error et la requête HEAD, puis ajoutez une couverture de régression montrant que la récupération de l’objet téléversé ne lève pas InvalidCredsError, tandis que les véritables échecs d’authentification restent identifiables.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
cloud
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
42/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.