cleanJobsInSet-3.lua 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. --[[
  2. Remove jobs from the specific set.
  3. Input:
  4. KEYS[1] set key,
  5. KEYS[2] events stream key
  6. KEYS[3] repeat key
  7. ARGV[1] jobKey prefix
  8. ARGV[2] timestamp
  9. ARGV[3] limit the number of jobs to be removed. 0 is unlimited
  10. ARGV[4] set name, can be any of 'wait', 'active', 'paused', 'delayed', 'completed', or 'failed'
  11. ]]
  12. local rcall = redis.call
  13. local repeatKey = KEYS[3]
  14. local rangeStart = 0
  15. local rangeEnd = -1
  16. local limit = tonumber(ARGV[3])
  17. -- If we're only deleting _n_ items, avoid retrieving all items
  18. -- for faster performance
  19. --
  20. -- Start from the tail of the list, since that's where oldest elements
  21. -- are generally added for FIFO lists
  22. if limit > 0 then
  23. rangeStart = -1 - limit + 1
  24. rangeEnd = -1
  25. end
  26. -- Includes
  27. --- @include "includes/cleanList"
  28. --- @include "includes/cleanSet"
  29. local result
  30. if ARGV[4] == "active" then
  31. result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], false --[[ hasFinished ]],
  32. repeatKey)
  33. elseif ARGV[4] == "delayed" then
  34. rangeEnd = "+inf"
  35. result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
  36. {"processedOn", "timestamp"}, false --[[ hasFinished ]], repeatKey)
  37. elseif ARGV[4] == "prioritized" then
  38. rangeEnd = "+inf"
  39. result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
  40. {"timestamp"}, false --[[ hasFinished ]], repeatKey)
  41. elseif ARGV[4] == "wait" or ARGV[4] == "paused" then
  42. result = cleanList(KEYS[1], ARGV[1], rangeStart, rangeEnd, ARGV[2], true --[[ hasFinished ]],
  43. repeatKey)
  44. else
  45. rangeEnd = ARGV[2]
  46. -- No need to pass repeat key as in that moment job won't be related to a job scheduler
  47. result = cleanSet(KEYS[1], ARGV[1], rangeEnd, ARGV[2], limit,
  48. {"finishedOn"}, true --[[ hasFinished ]])
  49. end
  50. rcall("XADD", KEYS[2], "*", "event", "cleaned", "count", result[2])
  51. return result[1]