From c61a3843a509f2d921b04b1ef143a8b2a3a0e053 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 19 Mar 2026 21:18:18 +0530 Subject: [PATCH] feat: distribute calling CLIs randomly --- api/services/campaign/rate_limiter.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/api/services/campaign/rate_limiter.py b/api/services/campaign/rate_limiter.py index 5bbfcea..e30e197 100644 --- a/api/services/campaign/rate_limiter.py +++ b/api/services/campaign/rate_limiter.py @@ -297,15 +297,19 @@ class RateLimiter: redis.call('ZADD', key, 0, member) end - -- Find an available number (score == 0) - local available = redis.call('ZRANGEBYSCORE', key, 0, 0, 'LIMIT', 0, 1) + -- Find all available numbers (score == 0) + local available = redis.call('ZRANGEBYSCORE', key, 0, 0) if #available == 0 then return nil end + -- Pick a random number from the available pool for uniform distribution + local idx = math.random(#available) + local chosen = available[idx] + -- Mark as in-use with current timestamp - redis.call('ZADD', key, now, available[1]) - return available[1] + redis.call('ZADD', key, now, chosen) + return chosen """ try: