@@ -16,7 +16,7 @@ class Worker < Base
1616 attr_reader :total
1717
1818 def initialize ( redis , config )
19- @reserved_test = nil
19+ @reserved_tests = Set . new
2020 @shutdown_required = false
2121 super ( redis , config )
2222 end
@@ -135,7 +135,7 @@ def requeue(test, offset: Redis.requeue_offset)
135135 argv : [ config . max_requeues , global_max_requeues , test_key , offset ] ,
136136 ) == 1
137137
138- @reserved_test = test_key unless requeued
138+ reserved_tests << test_key unless requeued
139139 requeued
140140 end
141141
@@ -152,25 +152,24 @@ def release!
152152
153153 attr_reader :index
154154
155+ def reserved_tests
156+ @reserved_tests ||= Set . new
157+ end
158+
155159 def worker_id
156160 config . worker_id
157161 end
158162
159- def raise_on_mismatching_test ( test_key )
160- if @reserved_test == test_key
161- @reserved_test = nil
162- else
163- raise ReservationError , "Acknowledged #{ test_key . inspect } but #{ @reserved_test . inspect } was reserved"
163+ def raise_on_mismatching_test ( test )
164+ unless reserved_tests . delete? ( test )
165+ raise ReservationError , "Acknowledged #{ test . inspect } but only #{ reserved_tests . map ( &:inspect ) . join ( ", " ) } reserved"
164166 end
165167 end
166168
167169 def reserve
168- if @reserved_test
169- raise ReservationError , "#{ @reserved_test . inspect } is already reserved. " \
170- "You have to acknowledge it before you can reserve another one"
171- end
172-
173- @reserved_test = ( try_to_reserve_lost_test || try_to_reserve_test )
170+ test = ( try_to_reserve_lost_test || try_to_reserve_test )
171+ reserved_tests << test
172+ test
174173 end
175174
176175 def try_to_reserve_test
0 commit comments