]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Ratelimit: Further penging field adjustments
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 24 Dec 2022 21:57:13 +0000 (21:57 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sat, 24 Dec 2022 21:57:13 +0000 (21:57 +0000)
src/plugins/lua/ratelimit.lua

index 9975f17a3d6c87d392a777a602d502e3f69e7ef2..d61e3990f6ab1ec2b94a8e585002af6e7405005a 100644 (file)
@@ -192,12 +192,12 @@ local bucket_update_script = [[
     end
   end
 
-  local burst = tonumber(redis.call('HGET', KEYS[1], 'b'))
-  if burst < 0 then burst = 0 end
+  local burst,pending = unpack(redis.call('HMGET', KEYS[1], 'b', 'p'))
+  burst,pending = tonumber(burst or '0'),tonumber(pending or '0')
+  if burst < 0 then burst = nrcpt else burst = burst + nrcpt end
+  if pending < nrcpt then pending = 0 else pending = pending - nrcpt end
 
-  redis.call('HINCRBYFLOAT', KEYS[1], 'b', nrcpt)
-  redis.call('HINCRBY', KEYS[1], 'p', -(nrcpt))
-  redis.call('HSET', KEYS[1], 'l', KEYS[2])
+  redis.call('HMSET', KEYS[1], 'b', tostring(burst), 'p', tostring(pending), 'l', KEYS[2])
   redis.call('EXPIRE', KEYS[1], KEYS[7])
 
   return {tostring(burst), tostring(dr), tostring(db)}