Retry-After retorna com 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 curtidas

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

2 curtidas

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 curtidas

Estou cuidando desse bug e vou enviar um pull request amanhã.

1 curtida

Acontece que não era um problema de arredondamento no script Lua. O script Lua já recebe valores arredondados.

Além disso, não se trata de um problema de arredondamento de forma alguma. Segundos não arredondados podem ser usados, e ainda assim seria possível receber uma resposta 429 com Retry-After: 0.

Aqui está a correção para o problema principal:

E aqui está a correção para um problema adicional que ocasionalmente pode causar o mesmo erro:

3 curtidas