Skip to content

Commit 044e85d

Browse files
committed
[CI] retrieve previous test owner
1 parent dbe8b01 commit 044e85d

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

redis/reserve_lost.lua

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ end
1818

1919
for _, test in ipairs(lost_tests) do
2020
if redis.call('sismember', processed_key, test) == 0 then
21+
-- Get previous owner before updating
22+
local previous_owner_key = redis.call('hget', owners_key, test)
23+
local previous_owner = nil
24+
if previous_owner_key then
25+
-- Extract worker_id from key format: build:<build_id>:worker:<worker_id>:queue
26+
previous_owner = string.match(previous_owner_key, "worker:([^:]+):queue")
27+
end
28+
2129
if use_dynamic_deadline then
2230
local dynamic_timeout = redis.call('hget', test_group_timeout_key, test)
2331
if not dynamic_timeout or dynamic_timeout == "" then
@@ -31,7 +39,13 @@ for _, test in ipairs(lost_tests) do
3139
end
3240
redis.call('lpush', worker_queue_key, test)
3341
redis.call('hset', owners_key, test, worker_queue_key) -- Take ownership
34-
return test
42+
43+
-- Return test and previous owner (separated by |)
44+
if previous_owner then
45+
return test .. "|" .. previous_owner
46+
else
47+
return test .. "|unknown"
48+
end
3549
end
3650
end
3751

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,8 @@ def try_to_reserve_test
288288

289289
def try_to_reserve_lost_test
290290
current_time = CI::Queue.time_now.to_f
291-
lost_test = eval_script(
291+
292+
result = eval_script(
292293
:reserve_lost,
293294
keys: [
294295
key('running'),
@@ -300,6 +301,15 @@ def try_to_reserve_lost_test
300301
argv: [current_time, timeout, 'true', config.timeout]
301302
)
302303

304+
# Parse result: format is "test_id|previous_owner" or nil
305+
lost_test = nil
306+
previous_owner = nil
307+
if result
308+
parts = result.split('|', 2)
309+
lost_test = parts[0]
310+
previous_owner = parts[1] if parts.length > 1
311+
end
312+
303313
if lost_test
304314
# Check what timeout was used (dynamic or default)
305315
dynamic_timeout = redis.hget(key('test-group-timeout'), lost_test)
@@ -327,7 +337,10 @@ def try_to_reserve_lost_test
327337
"default_timeout=#{config.timeout}s"
328338
end
329339

330-
warn "[reserve_lost] test=#{lost_test} current_time=#{current_time_readable} (#{current_time}) deadline=#{deadline_readable} (#{deadline}) gap=#{gap_seconds_formatted}s (#{gap_hours}h#{gap_mins}m#{gap_secs_formatted}s) [#{timeout_details}]"
340+
# Add previous owner information (from Lua script)
341+
previous_owner_info = previous_owner ? "previous_owner=#{previous_owner}" : 'previous_owner=unknown'
342+
343+
warn "[reserve_lost] test=#{lost_test} current_time=#{current_time_readable} (#{current_time}) deadline=#{deadline_readable} (#{deadline}) gap=#{gap_seconds_formatted}s (#{gap_hours}h#{gap_mins}m#{gap_secs_formatted}s) [#{timeout_details}] [#{previous_owner_info}]"
331344
end
332345

333346
if lost_test.nil? && idle?

0 commit comments

Comments
 (0)