Commit ded38d5f authored by Shinya Maeda's avatar Shinya Maeda

Add exclusive relase for trace arhive

parent ad12c58f
module Gitlab module Gitlab
module Ci module Ci
class Trace class Trace
include ExclusiveLeaseGuard
LEASE_TIMEOUT = 1.hour
ArchiveError = Class.new(StandardError) ArchiveError = Class.new(StandardError)
attr_reader :job attr_reader :job
...@@ -108,20 +112,22 @@ module Gitlab ...@@ -108,20 +112,22 @@ module Gitlab
raise ArchiveError, 'Already archived' if trace_artifact raise ArchiveError, 'Already archived' if trace_artifact
raise ArchiveError, 'Job is not finished yet' unless job.complete? raise ArchiveError, 'Job is not finished yet' unless job.complete?
if job.trace_chunks.any? try_obtain_lease do
Gitlab::Ci::Trace::ChunkedIO.new(job) do |stream| if job.trace_chunks.any?
archive_stream!(stream) Gitlab::Ci::Trace::ChunkedIO.new(job) do |stream|
stream.destroy! archive_stream!(stream)
end stream.destroy!
elsif current_path end
File.open(current_path) do |stream| elsif current_path
archive_stream!(stream) File.open(current_path) do |stream|
FileUtils.rm(current_path) archive_stream!(stream)
end FileUtils.rm(current_path)
elsif old_trace end
StringIO.new(old_trace, 'rb').tap do |stream| elsif old_trace
archive_stream!(stream) StringIO.new(old_trace, 'rb').tap do |stream|
job.erase_old_trace! archive_stream!(stream)
job.erase_old_trace!
end
end end
end end
end end
...@@ -206,6 +212,16 @@ module Gitlab ...@@ -206,6 +212,16 @@ module Gitlab
def trace_artifact def trace_artifact
job.job_artifacts_trace job.job_artifacts_trace
end end
# For ExclusiveLeaseGuard concerns
def lease_key
@lease_key ||= self.class.name.underscore + ":archive:#{job.id}"
end
# For ExclusiveLeaseGuard concern
def lease_timeout
LEASE_TIMEOUT
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment