-- If we have any time passed
if burst > 0 and last < now then
if enable_dynamic then
- dynr = tonumber(redis.call('HGET', prefix, 'dr')) / 10000.0
- if dynr == 0 then
- dynr = 0.0001
+ dynr = tonumber(redis.call('HGET', prefix, 'dr'))
+ if dynr then
+ dynr = dynr / 10000.0
+ if dynr == 0 then
+ dynr = 0.0001
+ end
+ else
+ dynr = 1.0
end
else
dynr = 1.0
end
if enable_dynamic then
- dynb = tonumber(redis.call('HGET', prefix, 'db')) / 10000.0
- if dynb == 0 then
- dynb = 0.0001
+ dynb = tonumber(redis.call('HGET', prefix, 'db'))
+ if dynb then
+ dynb = dynb / 10000.0
+ if dynb == 0 then
+ dynb = 0.0001
+ end
+ else
+ dynb = 1.0
end
else
dynb = 1.0
if max_dr > 1 then
local rate_mult = tonumber(KEYS[3])
- dr = tonumber(redis.call('HGET', prefix, 'dr')) / 10000
+ dr = tonumber(redis.call('HGET', prefix, 'dr'))
+ if dr then
+ dr = dr / 10000
+ else
+ dr = 1.0
+ end
if rate_mult > 1.0 and dr < max_dr then
dr = dr * rate_mult
local max_db = tonumber(KEYS[6])
if max_db > 1 then
local rate_mult = tonumber(KEYS[4])
- db = tonumber(redis.call('HGET', prefix, 'db')) / 10000
+ db = tonumber(redis.call('HGET', prefix, 'db'))
+ if db then
+ db = db / 10000
+ else
+ db = 1.0
+ end
if rate_mult > 1.0 and db < max_db then
db = db * rate_mult