Container credentials client sleeps after the final failed attempt
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 78/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- python
- Domaine
- authentication
Piste de recherche
Commencez par HttpCredentialsClient.get_credentials() et examinez la boucle de nouvelle tentative pour la gestion des exceptions décrite dans l’issue. Ajoutez ou mettez à jour un test de régression qui mocke asyncio.sleep et vérifie que deux tentatives produisent un sleep, tandis qu’un échec final est levé immédiatement ; le SmithyIdentityError terminal doit rester inchangé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
HttpCredentialsClient.get_credentials() waits for the retry delay after every failed attempt, including the final attempt when no retry remains. This adds one second of unnecessary latency before the client raises its terminal SmithyIdentityError.
With the default three attempts, a terminal failure incurs three one-second sleeps even though only two delays are needed between attempts. With retries=1, the single request still takes about one extra second to fail.
Regression Issue
This does not appear to be a regression.
Expected Behavior
The client should sleep only between attempts. After the final attempt fails, it should raise immediately.
Current Behavior
The except block awaits asyncio.sleep(_SLEEP_SECONDS) before incrementing/checking the attempt count, so the final failure always sleeps before leaving the loop.
Reproduction Steps
import asyncio
from time import monotonic
from aws_credentials_http.client import HttpCredentialsClient
from smithy_core import URI
from smithy_core.exceptions import SmithyIdentityError
from smithy_http import Fields
class FailingClient:
async def send(self, *args, **kwargs):
raise OSError("endpoint unavailable")
async def main():
client = HttpCredentialsClient(FailingClient(), retries=1) # type: ignore[arg-type]
started = monotonic()
try:
await client.get_credentials(
URI(scheme="http", host="169.254.170.2", path="/credentials"),
Fields(),
)
except SmithyIdentityError:
print(f"elapsed: {monotonic() - started:.1f}s")
asyncio.run(main())
On aws-credentials-http==0.3.0, this prints approximately elapsed: 1.0s even though only one request is configured and there is no subsequent retry to wait for.
Possible Solution
Increment the attempt count first, then await the retry delay only when attempts < self._retries. A regression test can mock asyncio.sleep and assert that two attempts produce one sleep.
Additional Information/Context
Confirmed against the current develop branch (5fed4da) and the latest published aws-credentials-http release, 0.3.0.
Affected area
credentials / authentication
Affected package(s)
aws-credentials-http 0.3.0
Python version used
Python 3.14.0
Operating System and version
macOS 27.0.1
- Langage dominant
- Python
- Étoiles
- 175
- Forks
- 24
- Merge moyen
- 3 j 4 h
- PR mergées (30 j)
- 13
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de aws/aws-sdk-python
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
aws/aws-sdk-python#13 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
aws/aws-sdk-python#99 ·
Les mainteneurs répondent en général sous 1 jour
-
Support Python 3.11Ouvertefeature-request p3 queued
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
aws/aws-sdk-python#92 ·
Les mainteneurs répondent en général sous 1 jour
-
announcement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
aws/aws-sdk-python#90 ·
Les mainteneurs répondent en général sous 1 jour
-
announcement
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
aws/aws-sdk-python#84 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de aws/aws-sdk-python
Issues similaires
-
Broken link in index.rstOuvertedocumentation
Difficulté 1/5 Moins d'une heure Accessibilité débutants 65/100
ansys/pydpf-core#3547 ·
Les mainteneurs répondent en général sous 1 jour
-
core
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
vectorize-io/hindsight#5457 ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: LangChain drops OpenAI Responses text blocks from session recordingPeut-être pris @ktz03 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
volcengine/OpenViking#5806 ·
Les mainteneurs répondent en général sous 1 jour
-
HTML: <template> content is extracted as document textPeut-être pris @ryanmeowy l’a pris aujourd’hui. Ouvertebug html
Difficulté 1/5 Moins d'une heure Accessibilité débutants 82/100
docling-project/docling#4714 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
APIv2 event data accepts a non-string reply and a NaN upper_boundPeut-être pris @awss1i l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
freedomofpress/securedrop#7946 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours