Retry-After wird mit 0 Sekunden zurückgegeben

When we retry after a 429, we get another 429.

I suspect a round-down issue.

In our scenario:

  • we do requests, and eventually get a 429 Too Many Request with Retry-After: 19
  • we wait 19 seconds, then try again:
    —> We get a 429 again, with Retry-After: 0

Now, can it be the actual values were 19.4 and 0.4 for example and they were rounded down for the Retry-After in the headers?

4 „Gefällt mir“

Probably, should be an easy fix. Another starter task @erlend_sh?

2 „Gefällt mir“

I’m not entirely sure where this is happening, but I suspect it has to do with use of Lua’s tonumber() in rate_limiter.rb—quoth Redis’ EVAL documentation:

Lua has a single numerical type, Lua numbers. There is no distinction between integers and floats. So we always convert Lua numbers into integer replies, removing the decimal part of the number if any.

4 „Gefällt mir“

Ich kümmere mich um diesen Fehler und werde morgen einen Pull-Request einreichen.

1 „Gefällt mir“

Es stellte sich heraus, dass es kein Problem mit der Rundung im Lua-Skript war. Das Lua-Skript erhält bereits gerundete Werte.

Darüber hinaus liegt das Problem überhaupt nicht an der Rundung. Nicht gerundete Sekunden könnten verwendet werden, und es wäre trotzdem möglich, eine 429-Antwort mit Retry-After: 0 zu erhalten.

Hier ist die Korrektur für das Hauptproblem:

Und hier ist die Korrektur für ein zusätzliches Problem, das gelegentlich denselben Fehler verursachen kann:

3 „Gefällt mir“