|
1 | | --- Lua script to clean up data in Redis |
| 1 | +-- KEYS[1]: the task data hash |
| 2 | +-- KEYS[2]: the metadata prefix (e.g. "task_meta") |
2 | 3 |
|
3 | | --- Define the keys |
4 | | -local done_list_key = KEYS[1] |
5 | | -local data_hash = KEYS[2] |
| 4 | +local terminal_statuses = { Done = true, Failed = true, Killed = true } |
| 5 | +local result_hash = KEYS[2] .. ":result" |
6 | 6 |
|
7 | | --- Iterate through done_list |
8 | | -local done_list_ids = redis.call('ZRANGE', done_list_key, 0, -1) |
| 7 | +local deleted = 0 |
9 | 8 |
|
10 | | --- Initialize a variable to count the number of removed items |
11 | | -local removed_items_count = 0 |
| 9 | +local fields = redis.call("hgetall", KEYS[1]) |
12 | 10 |
|
13 | | -for _, id in ipairs(done_list_ids) do |
| 11 | +-- fields is a flat list of [field, value, field, value, ...] |
| 12 | +for i = 1, #fields, 2 do |
| 13 | + local task_id = fields[i] |
| 14 | + local meta_key = KEYS[2] .. ':' .. task_id |
| 15 | + local status = redis.call("hget", meta_key, "status") |
14 | 16 |
|
15 | | - local is_member = redis.call('HEXISTS', data_hash, id) |
16 | | - if is_member == 1 then |
17 | | - -- Remove entry from data_hash |
18 | | - redis.call('HDEL', data_hash, id) |
19 | | - removed_items_count = removed_items_count + 1 |
20 | | - end |
| 17 | + if status and terminal_statuses[status] then |
| 18 | + redis.call("hdel", KEYS[1], task_id) |
| 19 | + redis.call("hdel", result_hash, task_id) |
| 20 | + redis.call("del", meta_key) |
| 21 | + deleted = deleted + 1 |
| 22 | + end |
21 | 23 | end |
22 | 24 |
|
23 | | --- Clean the done_list |
24 | | -redis.call('DEL', done_list_key) |
25 | | - |
26 | | -return removed_items_count |
| 25 | +return deleted |
0 commit comments