Remove traces efficiently

This commit is contained in:
Shinya Maeda 2018-07-03 14:00:25 +09:00
parent 4c1a2a9b99
commit 04ab732f30
2 changed files with 18 additions and 7 deletions

View File

@ -376,6 +376,10 @@ module Ci
trace.exist?
end
def has_old_trace?
old_trace.present?
end
def trace=(data)
raise NotImplementedError
end
@ -385,6 +389,8 @@ module Ci
end
def erase_old_trace!
raise Gitlab::Ci::Trace::EraseError, 'Old trace does not exist' unless has_old_trace?
update_column(:trace, nil)
end

View File

@ -6,6 +6,7 @@ module Gitlab
LEASE_TIMEOUT = 1.hour
ArchiveError = Class.new(StandardError)
EraseError = Class.new(StandardError)
attr_reader :job
@ -98,14 +99,18 @@ module Gitlab
end
def erase!
trace_artifact&.destroy
##
# Erase an archived traces
# This removes both a database-row and a real file in either a file storage or a object storage
trace_artifact&.destroy!
paths.each do |trace_path|
FileUtils.rm(trace_path, force: true)
end
job.trace_chunks.fast_destroy_all
job.erase_old_trace!
##
# Erase a live trace
# Basically, jobs have _one_ of the following live traces, but it might be able to happen by a race condition
# Therefore, we remove all type of live traces.
job.trace_chunks.fast_destroy_all # Destroy chunks of a live trace
FileUtils.rm_f(current_path) if current_path # Remove a trace file of a live trace
job.erase_old_trace! if job.has_old_trace? # Remove a trace in database of a live trace
end
def archive!