diff options
author | James Edwards-Jones <jedwardsjones@gitlab.com> | 2017-10-03 10:11:12 +0100 |
---|---|---|
committer | James Edwards-Jones <jedwardsjones@gitlab.com> | 2017-11-06 17:51:50 +0000 |
commit | 17d6efee29e6548e09407d747988a5651d067e0e (patch) | |
tree | d2a6fa65760d47f2752f65997dacced47ad625f8 | |
parent | a412c6321e2a3e75fa853ad0b3dd62bd810839fd (diff) | |
download | gitlab-ce-17d6efee29e6548e09407d747988a5651d067e0e.tar.gz |
LFS pruning can be scheduled in background
-rw-r--r-- | app/workers/lfs_cleanup_worker.rb | 14 | ||||
-rw-r--r-- | app/workers/lfs_project_cleanup_worker.rb | 9 | ||||
-rw-r--r-- | config/initializers/1_settings.rb | 4 | ||||
-rw-r--r-- | spec/workers/lfs_cleanup_worker_spec.rb | 33 | ||||
-rw-r--r-- | spec/workers/lfs_project_cleanup_worker_spec.rb | 12 |
5 files changed, 72 insertions, 0 deletions
diff --git a/app/workers/lfs_cleanup_worker.rb b/app/workers/lfs_cleanup_worker.rb new file mode 100644 index 00000000000..c1d5d771c53 --- /dev/null +++ b/app/workers/lfs_cleanup_worker.rb @@ -0,0 +1,14 @@ +class LfsCleanupWorker + include Sidekiq::Worker + include CronjobQueue + + def perform + projects = Project.joins(:lfs_pointers) + .joins(:lfs_objects) + .uniq + + projects.select(:id).find_each do |project| + LfsProjectCleanupWorker.perform_async(project.id) + end + end +end diff --git a/app/workers/lfs_project_cleanup_worker.rb b/app/workers/lfs_project_cleanup_worker.rb new file mode 100644 index 00000000000..982c0cae841 --- /dev/null +++ b/app/workers/lfs_project_cleanup_worker.rb @@ -0,0 +1,9 @@ +class LfsProjectCleanupWorker + include Sidekiq::Worker + + def perform(project_id) + project = Project.find(project_id) + + LfsCleanupService.new(project).remove_unreferenced + end +end diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb index 12694f8016f..ef7c7c0d169 100644 --- a/config/initializers/1_settings.rb +++ b/config/initializers/1_settings.rb @@ -415,6 +415,10 @@ Settings.cron_jobs['stuck_merge_jobs_worker'] ||= Settingslogic.new({}) Settings.cron_jobs['stuck_merge_jobs_worker']['cron'] ||= '0 */2 * * *' Settings.cron_jobs['stuck_merge_jobs_worker']['job_class'] = 'StuckMergeJobsWorker' +Settings.cron_jobs['lfs_cleanup_worker'] ||= Settingslogic.new({}) +Settings.cron_jobs['lfs_cleanup_worker']['cron'] ||= '0 0 * * 0' +Settings.cron_jobs['lfs_cleanup_worker']['job_class'] = 'LfsCleanupWorker' + # # GitLab Shell # diff --git a/spec/workers/lfs_cleanup_worker_spec.rb b/spec/workers/lfs_cleanup_worker_spec.rb new file mode 100644 index 00000000000..ee91fa3ab2a --- /dev/null +++ b/spec/workers/lfs_cleanup_worker_spec.rb @@ -0,0 +1,33 @@ +require 'spec_helper' + +describe LfsCleanupWorker do + subject(:worker) { described_class.new } + + describe '#perform' do + let!(:project) { create(:project) } + let!(:lfs_pointer) { create(:lfs_pointer, project: project) } + let!(:lfs_objects_project) { create(:lfs_objects_project, project: project) } + + it 'schedules cleanup for individual projects' do + expect(LfsProjectCleanupWorker).to receive(:perform_async).with(project.id) + + subject.perform + end + + it 'ignores projects without LfsPointer records' do + project.lfs_pointers.destroy_all + + expect(LfsProjectCleanupWorker).not_to receive(:perform_async) + + subject.perform + end + + it 'ignores projects without LfsObject records' do + project.lfs_pointers.destroy_all + + expect(LfsProjectCleanupWorker).not_to receive(:perform_async) + + subject.perform + end + end +end diff --git a/spec/workers/lfs_project_cleanup_worker_spec.rb b/spec/workers/lfs_project_cleanup_worker_spec.rb new file mode 100644 index 00000000000..327fa8acd14 --- /dev/null +++ b/spec/workers/lfs_project_cleanup_worker_spec.rb @@ -0,0 +1,12 @@ +require 'spec_helper' + +describe LfsProjectCleanupWorker do + let(:project) { create(:project) } + subject(:worker) { described_class.new } + + it 'calls service to cleanup unreferenced LFS pointers' do + expect_any_instance_of(LfsCleanupService).to receive(:remove_unreferenced) + + subject.perform(project.id) + end +end |