changeDelay-4.lua 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. --[[
  2. Change job delay when it is in delayed set.
  3. Input:
  4. KEYS[1] delayed key
  5. KEYS[2] meta key
  6. KEYS[3] marker key
  7. KEYS[4] events stream
  8. ARGV[1] delay
  9. ARGV[2] timestamp
  10. ARGV[3] the id of the job
  11. ARGV[4] job key
  12. Output:
  13. 0 - OK
  14. -1 - Missing job.
  15. -3 - Job not in delayed set.
  16. Events:
  17. - delayed key.
  18. ]]
  19. local rcall = redis.call
  20. -- Includes
  21. --- @include "includes/addDelayMarkerIfNeeded"
  22. --- @include "includes/getDelayedScore"
  23. --- @include "includes/getOrSetMaxEvents"
  24. if rcall("EXISTS", ARGV[4]) == 1 then
  25. local jobId = ARGV[3]
  26. local delay = tonumber(ARGV[1])
  27. local score, delayedTimestamp = getDelayedScore(KEYS[1], ARGV[2], delay)
  28. local numRemovedElements = rcall("ZREM", KEYS[1], jobId)
  29. if numRemovedElements < 1 then
  30. return -3
  31. end
  32. rcall("HSET", ARGV[4], "delay", delay)
  33. rcall("ZADD", KEYS[1], score, jobId)
  34. local maxEvents = getOrSetMaxEvents(KEYS[2])
  35. rcall("XADD", KEYS[4], "MAXLEN", "~", maxEvents, "*", "event", "delayed",
  36. "jobId", jobId, "delay", delayedTimestamp)
  37. -- mark that a delayed job is available
  38. addDelayMarkerIfNeeded(KEYS[3], KEYS[1])
  39. return 0
  40. else
  41. return -1
  42. end