يعيد Retry-After قيمة 0 ثانية

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 إعجابات

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

إعجابَين (2)

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 إعجابات

سأقوم بمعالجة هذا الخطأ وسأقدم طلب سحب غدًا.

إعجاب واحد (1)

اتضح أن المشكلة لم تكن في التقريب في سكريبت Lua. فسكريبت Lua يستقبل قيمًا مقربة بالفعل.

علاوة على ذلك، ليست المشكلة تتعلق بالتقريب على الإطلاق. فقد تُستخدم الثواني غير المقربة، ومع ذلك قد يكون من الممكن استلام استجابة 429 مع Retry-After: 0 في أي حال.

إليك الإصلاح للمشكلة الرئيسية:

وهذا إصلاح لمشكلة إضافية قد تتسبب أحيانًا في نفس الخطأ:

3 إعجابات