From a2d79e1f2c8186fa69a91717b3d4e71a332d8bbf Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Tue, 6 Feb 2018 01:52:46 +0900 Subject: [PATCH] Reorder async/sync tasks in BuildFinishedWorker to read traces efficiently --- app/workers/build_finished_worker.rb | 7 +++++-- spec/workers/build_finished_worker_spec.rb | 16 ++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/app/workers/build_finished_worker.rb b/app/workers/build_finished_worker.rb index 2acf0d14ff5..b5ed8d607b3 100644 --- a/app/workers/build_finished_worker.rb +++ b/app/workers/build_finished_worker.rb @@ -6,8 +6,11 @@ class BuildFinishedWorker def perform(build_id) Ci::Build.find_by(id: build_id).try do |build| - BuildTraceSectionsWorker.perform_async(build.id) - BuildCoverageWorker.perform_async(build.id) + # We execute that in sync as this access the files in order to access local file, and reduce IO + BuildTraceSectionsWorker.new.perform(build.id) + BuildCoverageWorker.new.perform(build.id) + + # We execute that async as this are two indepentent operations that can be executed after TraceSections and Coverage BuildHooksWorker.perform_async(build.id) CreateTraceArtifactWorker.perform_async(build.id) end diff --git a/spec/workers/build_finished_worker_spec.rb b/spec/workers/build_finished_worker_spec.rb index 0f46ad5bbea..c7ff8cf3b92 100644 --- a/spec/workers/build_finished_worker_spec.rb +++ b/spec/workers/build_finished_worker_spec.rb @@ -6,19 +6,15 @@ describe BuildFinishedWorker do let!(:build) { create(:ci_build) } it 'calculates coverage and calls hooks' do + expect(BuildTraceSectionsWorker) + .to receive(:new).ordered.and_call_original expect(BuildCoverageWorker) .to receive(:new).ordered.and_call_original - expect(BuildHooksWorker) - .to receive(:new).ordered.and_call_original - expect(BuildTraceSectionsWorker) - .to receive(:perform_async) - expect(CreateTraceArtifactWorker) - .to receive(:perform_async) - expect_any_instance_of(BuildCoverageWorker) - .to receive(:perform) - expect_any_instance_of(BuildHooksWorker) - .to receive(:perform) + expect_any_instance_of(BuildTraceSectionsWorker).to receive(:perform) + expect_any_instance_of(BuildCoverageWorker).to receive(:perform) + expect(BuildHooksWorker).to receive(:perform_async) + expect(CreateTraceArtifactWorker).to receive(:perform_async) described_class.new.perform(build.id) end