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:
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user