Skip to content

Commit 49a0560

Browse files
committed
Simplify worker history retry metadata
1 parent 19c8ac7 commit 49a0560

9 files changed

Lines changed: 12 additions & 167 deletions

File tree

‎ruby/lib/ci/queue/redis/retry.rb‎

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,19 @@ module CI
33
module Queue
44
module Redis
55
class Retry < Static
6-
attr_reader :history_items, :replayed_tests
7-
8-
def initialize(tests, config, redis:, history_items: 0, worker_history: false)
6+
def initialize(tests, config, redis:)
97
@redis = redis
10-
@history_items = history_items
11-
@replayed_tests = worker_history ? tests.size : 0
12-
@worker_history = worker_history
13-
@worker_history_complete = false
8+
@poll_completed = false
149
super(tests, config)
1510
end
1611

17-
def worker_history?
18-
@worker_history
19-
end
20-
21-
def worker_history_complete?
22-
@worker_history_complete
12+
def poll_completed?
13+
@poll_completed
2314
end
2415

25-
def poll(&block)
16+
def poll
2617
super
27-
@worker_history_complete = exhausted? if worker_history?
18+
@poll_completed = exhausted?
2819
end
2920

3021
def build

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -283,13 +283,7 @@ def worker_history_retry_queue
283283
end
284284
end
285285

286-
Retry.new(
287-
test_ids,
288-
config,
289-
redis: redis,
290-
history_items: reservations.size,
291-
worker_history: true
292-
)
286+
Retry.new(test_ids, config, redis: redis)
293287
end
294288

295289
# Runs a block while sending periodic heartbeats in a background thread.

‎ruby/lib/minitest/queue/recovery_reporter.rb‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def initialize(path:, queue:, config:)
1818
def report
1919
super
2020
return unless queue.exhausted?
21-
return if worker_history_retry? && !queue.worker_history_complete?
21+
return if worker_history_retry? && !queue.poll_completed?
2222

2323
directory = File.dirname(path)
2424
FileUtils.mkdir_p(directory)
@@ -37,18 +37,16 @@ def report
3737
attr_reader :config, :path, :queue
3838

3939
def worker_history_retry?
40-
queue.respond_to?(:worker_history?) && queue.worker_history?
40+
config.retry_mode == :worker_history && queue.respond_to?(:poll_completed?)
4141
end
4242

4343
def manifest
4444
{
4545
schema_version: 1,
4646
worker_id: config.worker_id.to_s,
4747
retry_count: config.retry_count,
48-
history_items: worker_history_retry? ? queue.history_items : 0,
49-
replayed_tests: worker_history_retry? ? queue.replayed_tests : 0,
5048
resumed_shared_queue: false,
51-
replay_completed: !worker_history_retry? || queue.worker_history_complete?
49+
replay_completed: !worker_history_retry? || queue.poll_completed?
5250
}
5351
end
5452
end

‎ruby/lib/minitest/queue/runner.rb‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def run_command
6161
puts "The retry queue does not contain any failure, we'll process the main queue instead."
6262
else
6363
if worker_history_retry?
64-
puts "Replaying #{retry_queue.replayed_tests} tests from #{retry_queue.history_items} worker reservations."
64+
puts "Replaying this worker's reservation history."
6565
else
6666
puts "Retrying failed tests."
6767
end

‎ruby/test/ci/queue/configuration_test.rb‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,10 @@ def test_buildkite_defaults
3333
'BUILDKITE_BUILD_ID' => '9e08ef3c-d6e6-4a86-91dd-577ce5205b8e',
3434
'BUILDKITE_PARALLEL_JOB' => '12',
3535
'BUILDKITE_COMMIT' => 'faa647bbb8168a77cf338e7488c3f8445c3e6554',
36-
'BUILDKITE_RETRY_COUNT' => '2',
3736
)
3837
assert_equal '9e08ef3c-d6e6-4a86-91dd-577ce5205b8e', config.build_id
3938
assert_equal '12', config.worker_id
4039
assert_equal 'faa647bbb8168a77cf338e7488c3f8445c3e6554', config.seed
41-
assert_equal 2, config.retry_count
42-
assert_equal :failures, config.retry_mode
4340
end
4441

4542
def test_travis_defaults

‎ruby/test/ci/queue/redis/worker_chunk_test.rb‎

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -243,62 +243,6 @@ def test_populate_with_many_chunks_uses_batching
243243
end
244244
end
245245

246-
def test_worker_history_retry_expands_chunks_and_deduplicates_tests
247-
tests = create_mock_tests(['TestA#test_1', 'TestA#test_2', 'TestB#test_1'])
248-
chunk = CI::Queue::TestChunk.new(
249-
'TestA:chunk_0',
250-
'TestA',
251-
['TestA#test_1', 'TestA#test_2'],
252-
2000.0
253-
)
254-
255-
@worker.stub(:reorder_tests, [chunk, tests.last]) do
256-
@worker.populate(tests)
257-
end
258-
259-
history_key = 'build:42:worker:1:queue'
260-
@redis.del(history_key)
261-
[chunk.id, tests.last.id, chunk.id, tests[1].id].each do |id|
262-
@redis.lpush(history_key, id)
263-
end
264-
265-
retry_queue = @worker.retry_queue(scope: :worker_history)
266-
retry_queue.populate(tests)
267-
268-
assert_equal ['TestA#test_1', 'TestA#test_2', 'TestB#test_1'], retry_queue.to_a.map(&:id)
269-
assert_equal 4, retry_queue.history_items
270-
assert_equal 3, retry_queue.replayed_tests
271-
assert retry_queue.worker_history?
272-
end
273-
274-
def test_worker_history_retry_requires_reservations
275-
error = assert_raises(CI::Queue::Redis::WorkerHistoryError) do
276-
@worker.retry_queue(scope: :worker_history)
277-
end
278-
279-
assert_equal 'Reservation history is missing for worker 1', error.message
280-
end
281-
282-
def test_worker_history_retry_requires_chunk_metadata
283-
@redis.lpush('build:42:worker:1:queue', 'TestA:chunk_0')
284-
285-
error = assert_raises(CI::Queue::Redis::WorkerHistoryError) do
286-
@worker.retry_queue(scope: :worker_history)
287-
end
288-
289-
assert_equal 'Chunk metadata is missing for TestA:chunk_0', error.message
290-
end
291-
292-
def test_worker_history_retry_is_incomplete_when_a_test_cannot_be_resolved
293-
@redis.lpush('build:42:worker:1:queue', 'MissingTest#test_1')
294-
retry_queue = @worker.retry_queue(scope: :worker_history)
295-
retry_queue.populate([])
296-
297-
assert_raises(KeyError) { retry_queue.poll { |_test| } }
298-
assert retry_queue.exhausted?
299-
refute retry_queue.worker_history_complete?
300-
end
301-
302246
private
303247

304248
def create_mock_tests(test_ids)

‎ruby/test/ci/queue/static_test.rb‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,6 @@
44
class CI::Queue::StaticTest < Minitest::Test
55
include SharedQueueAssertions
66

7-
def test_shutdown_stops_polling
8-
order = []
9-
10-
@queue.poll do |test|
11-
order << test
12-
@queue.shutdown!
13-
end
14-
15-
assert_equal 1, order.size
16-
refute @queue.exhausted?
17-
end
18-
197
private
208

219
def build_queue

‎ruby/test/integration/minitest_redis_test.rb‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -271,20 +271,16 @@ def test_worker_history_retry_writes_recovery_manifest
271271

272272
first_manifest = JSON.parse(File.read(manifest_path))
273273
assert_equal 0, first_manifest['retry_count']
274-
assert_equal 0, first_manifest['history_items']
275-
assert_equal 0, first_manifest['replayed_tests']
276274
refute first_manifest['resumed_shared_queue']
277275
assert first_manifest['replay_completed']
278276

279277
out, = run_worker_history_worker(manifest_path, retry_count: 1)
280278

281-
assert_includes out, 'Replaying 100 tests from 100 worker reservations.'
279+
assert_includes out, "Replaying this worker's reservation history."
282280
retry_manifest = JSON.parse(File.read(manifest_path))
283281
assert_equal 1, retry_manifest['schema_version']
284282
assert_equal '1', retry_manifest['worker_id']
285283
assert_equal 1, retry_manifest['retry_count']
286-
assert_equal 100, retry_manifest['history_items']
287-
assert_equal 100, retry_manifest['replayed_tests']
288284
refute retry_manifest['resumed_shared_queue']
289285
assert retry_manifest['replay_completed']
290286
end

‎ruby/test/minitest/queue/recovery_reporter_test.rb‎

Lines changed: 0 additions & 63 deletions
This file was deleted.

0 commit comments

Comments
 (0)