Retry-After devuelve 0 segundos

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 Me gusta

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

2 Me gusta

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 Me gusta

Me estoy encargando de este error y enviaré una solicitud de extracción mañana.

1 me gusta

Resultó que no era un problema de redondeo en el script de Lua. El script de Lua ya recibe valores redondeados.

Además, no se trata en absoluto de un problema de redondeo. Podrían utilizarse segundos sin redondear, y aun así sería posible recibir una respuesta 429 con Retry-After: 0.

Aquí está la corrección para el problema principal:

Y aquí está la corrección para un problema adicional que ocasionalmente puede causar el mismo error:

3 Me gusta