mirror of
https://github.com/softprops/action-gh-release.git
synced 2025-05-13 11:44:20 +00:00
51 lines
1.4 KiB
Lua
51 lines
1.4 KiB
Lua
local index = ARGV[num_static_argv + 1]
|
|
local weight = tonumber(ARGV[num_static_argv + 2])
|
|
local expiration = tonumber(ARGV[num_static_argv + 3])
|
|
|
|
local state = process_tick(now, false)
|
|
local capacity = state['capacity']
|
|
local reservoir = state['reservoir']
|
|
|
|
local settings = redis.call('hmget', settings_key,
|
|
'nextRequest',
|
|
'minTime',
|
|
'groupTimeout'
|
|
)
|
|
local nextRequest = tonumber(settings[1])
|
|
local minTime = tonumber(settings[2])
|
|
local groupTimeout = tonumber(settings[3])
|
|
|
|
if conditions_check(capacity, weight) then
|
|
|
|
redis.call('hincrby', settings_key, 'running', weight)
|
|
redis.call('hset', job_weights_key, index, weight)
|
|
if expiration ~= nil then
|
|
redis.call('zadd', job_expirations_key, now + expiration, index)
|
|
end
|
|
redis.call('hset', job_clients_key, index, client)
|
|
redis.call('zincrby', client_running_key, weight, client)
|
|
redis.call('hincrby', client_num_queued_key, client, -1)
|
|
redis.call('zadd', client_last_registered_key, now, client)
|
|
|
|
local wait = math.max(nextRequest - now, 0)
|
|
local newNextRequest = now + wait + minTime
|
|
|
|
if reservoir == nil then
|
|
redis.call('hset', settings_key,
|
|
'nextRequest', newNextRequest
|
|
)
|
|
else
|
|
reservoir = reservoir - weight
|
|
redis.call('hmset', settings_key,
|
|
'reservoir', reservoir,
|
|
'nextRequest', newNextRequest
|
|
)
|
|
end
|
|
|
|
refresh_expiration(now, newNextRequest, groupTimeout)
|
|
|
|
return {true, wait, reservoir}
|
|
|
|
else
|
|
return {false}
|
|
end
|