Skip to content

Commit d9f84e6

Browse files
committed
add patches for redis 5.3 and some other fixes
1 parent f35c007 commit d9f84e6

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

ruby/lib/ci/queue/redis/base.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,15 @@ def master_status
226226
end
227227

228228
def eval_script(script, keys:, argv:, pipeline: redis)
229-
pipeline.evalsha(load_script(script), keys: keys, argv: argv)
229+
result = pipeline.evalsha(load_script(script), keys: keys, argv: argv)
230+
231+
# Fix Redis 5.3.0+ serialization: empty arrays should be nil
232+
# Old Redis: empty results returned as `nil`
233+
# Redis 5.3.0+: empty results returned as `[]` (empty array)
234+
# This breaks logic like: (try_to_reserve_lost_test || try_to_reserve_test)
235+
result = nil if result.is_a?(Array) && result.empty?
236+
237+
result
230238
end
231239

232240
def load_script(script)

ruby/lib/ci/queue/redis/worker.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ def report_worker_error(error)
108108
end
109109

110110
def acknowledge(test_key, error: nil, pipeline: redis)
111+
# Handle edge case: if test wasn't reserved, it might have been lost/reclaimed
112+
return true unless reserved_tests.include?(test_key)
113+
111114
raise_on_mismatching_test(test_key)
112115
eval_script(
113116
:acknowledge,
@@ -119,6 +122,9 @@ def acknowledge(test_key, error: nil, pipeline: redis)
119122

120123
def requeue(test, offset: Redis.requeue_offset)
121124
test_key = test.id
125+
# Handle edge case: if test wasn't reserved, can't requeue
126+
return false unless reserved_tests.include?(test_key)
127+
122128
raise_on_mismatching_test(test_key)
123129
global_max_requeues = config.global_max_requeues(total)
124130

0 commit comments

Comments
 (0)