2
0
mirror of https://github.com/hibiken/asynq.git synced 2025-10-04 17:42:01 +08:00

Add methods to rdb to enqueue all tasks from dead, retry and scheduled

queue
This commit is contained in:
Ken Hibino
2019-12-10 20:28:31 -08:00
parent c0185061eb
commit 0d74c518bf
3 changed files with 190 additions and 1 deletions

View File

@@ -272,6 +272,21 @@ func (r *RDB) EnqueueScheduledTask(id uuid.UUID, score int64) error {
return nil
}
// EnqueueAllScheduledTasks enqueues all tasks from scheduled queue.
func (r *RDB) EnqueueAllScheduledTasks() error {
return r.removeAndEnqueueAll(scheduledQ)
}
// EnqueueAllRetryTasks enqueues all tasks from retry queue.
func (r *RDB) EnqueueAllRetryTasks() error {
return r.removeAndEnqueueAll(retryQ)
}
// EnqueueAllDeadTasks enqueues all tasks from dead queue.
func (r *RDB) EnqueueAllDeadTasks() error {
return r.removeAndEnqueueAll(deadQ)
}
func (r *RDB) removeAndEnqueue(zset, id string, score float64) (int64, error) {
script := redis.NewScript(`
local msgs = redis.call("ZRANGEBYSCORE", KEYS[1], ARGV[1], ARGV[1])
@@ -295,3 +310,19 @@ func (r *RDB) removeAndEnqueue(zset, id string, score float64) (int64, error) {
}
return n, nil
}
func (r *RDB) removeAndEnqueueAll(zset string) error {
script := redis.NewScript(`
local msgs = redis.call("ZRANGE", KEYS[1], 0, -1)
for _, msg in ipairs(msgs) do
redis.call("ZREM", KEYS[1], msg)
redis.call("LPUSH", KEYS[2], msg)
end
return table.getn(msgs)
`)
_, err := script.Run(r.client, []string{zset, defaultQ}).Result()
if err != nil {
return err
}
return nil
}