@@ -18,9 +18,12 @@ class Worker < Base
18
18
def initialize ( redis , config )
19
19
@reserved_test = nil
20
20
@shutdown_required = false
21
+ @idle_since = nil
21
22
super ( redis , config )
22
23
end
23
24
25
+ attr_accessor :idle_since
26
+
24
27
def distributed?
25
28
true
26
29
end
@@ -48,6 +51,10 @@ def master?
48
51
@master
49
52
end
50
53
54
+ def idle?
55
+ !( @idle_since . nil? )
56
+ end
57
+
51
58
def poll
52
59
wait_for_master
53
60
idle_since = nil
@@ -60,10 +67,17 @@ def poll
60
67
idle_since ||= Time . now
61
68
if Time . now - idle_since > 120 && !idle_state_printed
62
69
puts "Worker #{ worker_id } has been idle for 120 seconds. Printing global state..."
70
+ running_tests = redis . zrange ( key ( 'running' ) , 0 , -1 , withscores : true )
63
71
puts " Processed tests: #{ redis . scard ( key ( 'processed' ) ) } "
64
72
puts " Pending tests: #{ redis . llen ( key ( 'queue' ) ) } . #{ redis . lrange ( key ( 'queue' ) , 0 , -1 ) } "
65
- puts " Running tests: #{ redis . zcard ( key ( 'running' ) ) } . #{ redis . zrange ( key ( 'running' ) , 0 , - 1 ) } "
73
+ puts " Running tests: #{ running_tests . size } . #{ running_tests } "
66
74
puts " Owners: #{ redis . hgetall ( key ( 'owners' ) ) } "
75
+ unless running_tests . empty?
76
+ puts " Checking if running tests are in processed set:"
77
+ running_tests . each do |test , _score |
78
+ puts " #{ test } : #{ redis . sismember ( key ( 'processed' ) , test ) } "
79
+ end
80
+ end
67
81
idle_state_printed = true
68
82
end
69
83
sleep 0.05
@@ -203,6 +217,12 @@ def try_to_reserve_lost_test
203
217
argv : [ Time . now . to_f , timeout ] ,
204
218
)
205
219
220
+ if lost_test . nil? && idle?
221
+ puts "Worker #{ worker_id } could not reserve a lost test while idle"
222
+ puts "Printing running tests:"
223
+ puts "#{ redis . zrange ( key ( 'running' ) , 0 , -1 , withscores : true ) } "
224
+ end
225
+
206
226
if lost_test
207
227
build . record_warning ( Warnings ::RESERVED_LOST_TEST , test : lost_test , timeout : timeout )
208
228
end
0 commit comments