diff options
author | Shinya Maeda <shinya@gitlab.com> | 2018-02-28 18:43:19 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2018-03-06 21:43:19 +0900 |
commit | 824af79d64b8be277dbddad0936c2b7b8237ce5d (patch) | |
tree | 23fdd97074bfb8fa6491f0dc0fc7f16402dc8b0e | |
parent | 91117452e1c106352171aea56ef336dbafd322a6 (diff) | |
download | gitlab-ce-824af79d64b8be277dbddad0936c2b7b8237ce5d.tar.gz |
Fix rake task to use corrrect SQL
-rw-r--r-- | lib/tasks/gitlab/traces.rake | 9 | ||||
-rw-r--r-- | spec/tasks/gitlab/traces_rake_spec.rb | 55 |
2 files changed, 59 insertions, 5 deletions
diff --git a/lib/tasks/gitlab/traces.rake b/lib/tasks/gitlab/traces.rake index 04b939d23c9..46e2f0e523c 100644 --- a/lib/tasks/gitlab/traces.rake +++ b/lib/tasks/gitlab/traces.rake @@ -8,17 +8,16 @@ namespace :gitlab do logger = Logger.new(STDOUT) logger.info('Archiving legacy traces') - Ci::Build.joins('RIGHT JOIN ci_job_artifacts ON ci_job_artifacts.job_id = ci_builds.id') - .finished - .where('ci_job_artifacts.file_type <> 3') - .group('ci_builds.id') + Ci::Build.finished + .where('NOT EXISTS (?)', + Ci::JobArtifact.select(1).trace.where('ci_builds.id = ci_job_artifacts.job_id')) .order(id: :asc) .find_in_batches(batch_size: 1000) do |jobs| job_ids = jobs.map { |job| [job.id] } ArchiveLegacyTraceWorker.bulk_perform_async(job_ids) - logger.info("Scheduled #{job_ids.count} jobs. From #{job_ids.min} #{job_ids.max}") + logger.info("Scheduled #{job_ids.count} jobs. From #{job_ids.min} to #{job_ids.max}") end end end diff --git a/spec/tasks/gitlab/traces_rake_spec.rb b/spec/tasks/gitlab/traces_rake_spec.rb new file mode 100644 index 00000000000..d2eaa88f287 --- /dev/null +++ b/spec/tasks/gitlab/traces_rake_spec.rb @@ -0,0 +1,55 @@ +require 'rake_helper' + +describe 'gitlab:traces rake tasks' do + before do + Rake.application.rake_require 'tasks/gitlab/traces' + end + + shared_examples 'passes the job id to worker' do + it do + expect(ArchiveLegacyTraceWorker).to receive(:bulk_perform_async).with([[job.id]]) + + run_rake_task('gitlab:traces:archive') + end + end + + shared_examples 'does not pass the job id to worker' do + it do + expect(ArchiveLegacyTraceWorker).not_to receive(:bulk_perform_async) + + run_rake_task('gitlab:traces:archive') + end + end + + context 'when trace file stored in default path' do + let!(:job) { create(:ci_build, :success, :trace_live) } + + it_behaves_like 'passes the job id to worker' + end + + context 'when trace is stored in database' do + let!(:job) { create(:ci_build, :success) } + + before do + job.update_column(:trace, 'trace in db') + end + + it_behaves_like 'passes the job id to worker' + end + + context 'when job has trace artifact' do + let!(:job) { create(:ci_build, :success) } + + before do + create(:ci_job_artifact, :trace, job: job) + end + + it_behaves_like 'does not pass the job id to worker' + end + + context 'when job is not finished yet' do + let!(:build) { create(:ci_build, :running, :trace_live) } + + it_behaves_like 'does not pass the job id to worker' + end +end |