apache / apache/libcloud

Retry decorator on RateLimitExceeded issue

Offen
#1,577 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
stale
Vorherrschende Sprache
Python
Sterne
2.1k
Forks
931
Ø Merge
1 T. 2 Std.
Gemergte PRs (30 T.)
4

Beschreibung

## Summary

Enabling retry logic does not work for rate limit exceeded responses.

## Detailed Information

retry decorator expects a `RateLimitExceeded` error to be raised, though `session.request` method does not raise an exception if a response is returned by the server no matter the status code.

I've tested it on azure_arm driver by setting `RETRY_FAILED_HTTP_REQUESTS` to True and trying:
```python
while True:
nodes = driver.list_nodes()
print(nodes)
```

Hitting the throttling limit results in:

```python
Traceback (most recent call last):
File "test.py", line 23, in
nodes = driver.list_nodes()
File "/home/dimgal/libcloud/libcloud/compute/drivers/azure_arm.py", line 395, in list_nodes
r = self.connection.request(action,
File "/home/dimgal/libcloud/libcloud/common/azure_arm.py", line 227, in request
return super(AzureResourceManagementConnection, self) \
File "/home/dimgal/libcloud/libcloud/common/base.py", line 655, in request
response = responseCls(**kwargs)
File "/home/dimgal/libcloud/libcloud/common/base.py", line 165, in __init__
raise exception_from_message(code=self.status,
libcloud.common.exceptions.RateLimitReachedError: 429 Rate limit exceeded
```
urllib3 supports [retries](https://urllib3.readthedocs.io/en/latest/reference/urllib3.util.html#urllib3.util.Retry) based on HTTP status codes, maybe use this? Let me know how you think this should be handled

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, den Retry-Decorator und den Request-Ablauf in libcloud/common/base.py nachzuverfolgen, und vergleiche dann den Azure-ARM-Pfad in libcloud/common/azure_arm.py mit dem im Bericht gezeigten Aufruf des azure_arm-Treibers. Reproduziere den konfigurierten Rate-Limit-Fall und ermittle, wie aus einer zurückgegebenen 429 ein RateLimitReachedError wird. Als erledigt gilt die Aufgabe, wenn das Retry-Verhalten für Rate-Limit-Antworten funktioniert, sobald die Retry-Logik aktiviert ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend, cloud
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.