Skip to content
Snippets Groups Projects
Commit 1b9f4b86 authored by Jacob Vosmaer (GitLab)'s avatar Jacob Vosmaer (GitLab)
Browse files

Clear archive cache asynchronously

parent dad30ec0
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -8,6 +8,14 @@ class Repository
 
attr_accessor :raw_repository, :path_with_namespace, :project
 
def self.clean_old_archives
repository_downloads_path = Gitlab.config.gitlab.repository_downloads_path
return unless File.directory?(repository_downloads_path)
Gitlab::Popen.popen(%W(find #{repository_downloads_path} -not -path #{repository_downloads_path} -mmin +120 -delete))
end
def initialize(path_with_namespace, default_branch = nil, project = nil)
@path_with_namespace = path_with_namespace
@project = project
Loading
Loading
@@ -269,14 +277,6 @@ class Repository
end
 
# Remove archives older than 2 hours
def clean_old_archives
repository_downloads_path = Gitlab.config.gitlab.repository_downloads_path
return unless File.directory?(repository_downloads_path)
Gitlab::Popen.popen(%W(find #{repository_downloads_path} -not -path #{repository_downloads_path} -mmin +120 -delete))
end
def branches_sorted_by(value)
case value
when 'recently_updated'
Loading
Loading
Loading
Loading
@@ -7,7 +7,7 @@ class ArchiveRepositoryService
end
 
def execute(options = {})
project.repository.clean_old_archives
RepositoryArchiveCacheWorker.perform_async
 
metadata = project.repository.archive_metadata(ref, storage_path, format)
raise "Repository or ref not found" if metadata.empty?
Loading
Loading
class RepositoryArchiveCacheWorker
include Sidekiq::Worker
sidekiq_options queue: :default
def perform
Repository.clean_old_archives
end
end
class RepositoryArchiveWorker
include Sidekiq::Worker
sidekiq_options queue: :archive_repo
attr_accessor :project, :ref, :format
def perform(project_id, ref, format)
@project = Project.find(project_id)
@ref, @format = ref, format.downcase
repository = project.repository
repository.clean_old_archives
return unless file_path
return if archived? || archiving?
repository.archive_repo(ref, storage_path, format)
end
private
def storage_path
Gitlab.config.gitlab.repository_downloads_path
end
def file_path
@file_path ||= project.repository.archive_file_path(ref, storage_path, format)
end
def pid_file_path
@pid_file_path ||= project.repository.archive_pid_file_path(ref, storage_path, format)
end
def archived?
File.exist?(file_path)
end
def archiving?
File.exist?(pid_file_path)
end
end
Loading
Loading
@@ -6,7 +6,7 @@ describe ArchiveRepositoryService do
 
describe "#execute" do
it "cleans old archives" do
expect(project.repository).to receive(:clean_old_archives)
expect(RepositoryArchiveCacheWorker).to receive(:perform_async)
 
subject.execute(timeout: 0.0)
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment