summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2018-02-26 23:06:04 +0900
committerShinya Maeda <shinya@gitlab.com>2018-03-06 21:43:19 +0900
commit32c1501d69d1618452e0088b343a6806769d79a9 (patch)
tree470240815db1a615ec65996cb38e0e423dae7f34
parentf0d7a2ffc419e5e4893f9161c008d4ead5d3a660 (diff)
downloadgitlab-ce-32c1501d69d1618452e0088b343a6806769d79a9.tar.gz
Add rake task. Adopt the latest fix. Drop CreateTraceArtifactService
-rw-r--r--app/services/ci/create_trace_artifact_service.rb36
-rw-r--r--app/workers/archive_legacy_trace_worker.rb10
-rw-r--r--app/workers/create_trace_artifact_worker.rb4
-rw-r--r--lib/gitlab/ci/trace.rb34
-rw-r--r--lib/tasks/gitlab/traces.rake17
5 files changed, 50 insertions, 51 deletions
diff --git a/app/services/ci/create_trace_artifact_service.rb b/app/services/ci/create_trace_artifact_service.rb
deleted file mode 100644
index ffde824972c..00000000000
--- a/app/services/ci/create_trace_artifact_service.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-module Ci
- class CreateTraceArtifactService < BaseService
- def execute(job)
- return if job.job_artifacts_trace
-
- job.trace.read do |stream|
- break unless stream.file?
-
- clone_file!(stream.path, JobArtifactUploader.workhorse_upload_path) do |clone_path|
- create_job_trace!(job, clone_path)
- FileUtils.rm(stream.path)
- end
- end
- end
-
- private
-
- def create_job_trace!(job, path)
- File.open(path) do |stream|
- job.create_job_artifacts_trace!(
- project: job.project,
- file_type: :trace,
- file: stream)
- end
- end
-
- def clone_file!(src_path, temp_dir)
- FileUtils.mkdir_p(temp_dir)
- Dir.mktmpdir('tmp-trace', temp_dir) do |dir_path|
- temp_path = File.join(dir_path, "job.log")
- FileUtils.copy(src_path, temp_path)
- yield(temp_path)
- end
- end
- end
-end
diff --git a/app/workers/archive_legacy_trace_worker.rb b/app/workers/archive_legacy_trace_worker.rb
new file mode 100644
index 00000000000..01b6224494b
--- /dev/null
+++ b/app/workers/archive_legacy_trace_worker.rb
@@ -0,0 +1,10 @@
+class ArchiveLegacyTraceWorker
+ include ApplicationWorker
+ include ObjectStorageQueue
+
+ def perform(job_id)
+ Ci::Build.find_by(id: job_id).try do |job|
+ job.trace.archive!
+ end
+ end
+end
diff --git a/app/workers/create_trace_artifact_worker.rb b/app/workers/create_trace_artifact_worker.rb
index 3283e8d79f0..a0cec43157e 100644
--- a/app/workers/create_trace_artifact_worker.rb
+++ b/app/workers/create_trace_artifact_worker.rb
@@ -2,10 +2,8 @@ class CreateTraceArtifactWorker
include ApplicationWorker
include PipelineQueue
- # TODO: this worker should use BackgroundMigration or ObjectStorage queue
-
def perform(job_id)
- Ci::Build.preload(:project, :user).find_by(id: job_id).try do |job|
+ Ci::Build.find_by(id: job_id).try do |job|
job.trace.archive!
end
end
diff --git a/lib/gitlab/ci/trace.rb b/lib/gitlab/ci/trace.rb
index defc8160121..ef5e7fcac23 100644
--- a/lib/gitlab/ci/trace.rb
+++ b/lib/gitlab/ci/trace.rb
@@ -112,18 +112,28 @@ module Gitlab
private
def archive_stream!(stream)
- file = Tempfile.new('trace.log')
- size = IO.copy_stream(file, stream)
- raise 'Not all saved' unless size == stream.size
- file.close
-
- job.create_job_artifacts_trace!(
- project: job.project,
- file_type: :trace,
- file: file)
- ensure
- file&.close
- file&.unlink
+ clone_file!(stream, JobArtifactUploader.workhorse_upload_path) do |clone_path|
+ create_job_trace!(job, clone_path)
+ end
+ end
+
+ def clone_file!(src_stream, temp_dir)
+ FileUtils.mkdir_p(temp_dir)
+ Dir.mktmpdir('tmp-trace', temp_dir) do |dir_path|
+ temp_path = File.join(dir_path, "job.log")
+ size = IO.write(src_stream, temp_path)
+ raise 'Not all saved' unless size == src_stream.size
+ yield(temp_path)
+ end
+ end
+
+ def create_job_trace!(job, path)
+ File.open(path) do |stream|
+ job.create_job_artifacts_trace!(
+ project: job.project,
+ file_type: :trace,
+ file: stream)
+ end
end
def ensure_path
diff --git a/lib/tasks/gitlab/traces.rake b/lib/tasks/gitlab/traces.rake
new file mode 100644
index 00000000000..f45edc922aa
--- /dev/null
+++ b/lib/tasks/gitlab/traces.rake
@@ -0,0 +1,17 @@
+require 'logger'
+require 'resolv-replace'
+
+desc "GitLab | Archive legacy traces to trace artifacts"
+namespace :gitlab do
+ namespace :traces do
+ task archive: :environment do
+ logger = Logger.new(STDOUT)
+ logger.info('Archiving legacy traces')
+
+ job_ids = Ci::Build.complete.without_trace_artifact.pluck(:id)
+ job_ids = job_ids.map { |build_id| [build_id] }
+
+ ArchiveLegacyTraceWorker.bulk_perform_async(job_ids)
+ end
+ end
+end