diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2017-12-08 09:09:06 +0000 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2018-02-28 20:45:07 +0100 |
commit | 87f11d2cf539d9539b439b54355f0dadaf4ebf76 (patch) | |
tree | 389f5bb28aabfe6a189795fa91611318bb272101 /app | |
parent | 6ca02a41500790b3e9061dd8836540955b9aaf7c (diff) | |
download | gitlab-ce-87f11d2cf539d9539b439b54355f0dadaf4ebf76.tar.gz |
Merge branch 'zj-auto-upload-job-artifacts' into 'master'
Transfer job archives after creation
See merge request gitlab-org/gitlab-ee!3646
Diffstat (limited to 'app')
-rw-r--r-- | app/models/ci/job_artifact.rb | 7 | ||||
-rw-r--r-- | app/models/lfs_object.rb | 9 | ||||
-rw-r--r-- | app/uploaders/lfs_object_uploader.rb | 1 | ||||
-rw-r--r-- | app/uploaders/object_store_uploader.rb | 11 | ||||
-rw-r--r-- | app/workers/object_storage_upload_worker.rb | 6 |
5 files changed, 28 insertions, 6 deletions
diff --git a/app/models/ci/job_artifact.rb b/app/models/ci/job_artifact.rb index 84fc6863567..1aea897aaca 100644 --- a/app/models/ci/job_artifact.rb +++ b/app/models/ci/job_artifact.rb @@ -1,5 +1,6 @@ module Ci class JobArtifact < ActiveRecord::Base + include AfterCommitQueue extend Gitlab::Ci::Model belongs_to :project @@ -9,6 +10,12 @@ module Ci mount_uploader :file, JobArtifactUploader + after_save if: :file_changed?, on: [:create, :update] do + run_after_commit do + file.schedule_migration_to_object_storage + end + end + enum file_type: { archive: 1, metadata: 2 diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb index 38b8c41024a..6ad792aab30 100644 --- a/app/models/lfs_object.rb +++ b/app/models/lfs_object.rb @@ -1,4 +1,7 @@ class LfsObject < ActiveRecord::Base + prepend EE::LfsObject + include AfterCommitQueue + has_many :lfs_objects_projects, dependent: :destroy # rubocop:disable Cop/ActiveRecordDependent has_many :projects, through: :lfs_objects_projects @@ -8,6 +11,12 @@ class LfsObject < ActiveRecord::Base mount_uploader :file, LfsObjectUploader + after_save if: :file_changed?, on: [:create, :update] do + run_after_commit do + file.schedule_migration_to_object_storage + end + end + def project_allowed_access?(project) projects.exists?(project.lfs_storage_project.id) end diff --git a/app/uploaders/lfs_object_uploader.rb b/app/uploaders/lfs_object_uploader.rb index 88cf0450dcd..fa42e4710b7 100644 --- a/app/uploaders/lfs_object_uploader.rb +++ b/app/uploaders/lfs_object_uploader.rb @@ -1,6 +1,5 @@ class LfsObjectUploader < ObjectStoreUploader storage_options Gitlab.config.lfs - after :store, :schedule_migration_to_object_storage def self.local_store_path Gitlab.config.lfs.storage_path diff --git a/app/uploaders/object_store_uploader.rb b/app/uploaders/object_store_uploader.rb index b5de0357a5f..bb25dc4219f 100644 --- a/app/uploaders/object_store_uploader.rb +++ b/app/uploaders/object_store_uploader.rb @@ -116,10 +116,13 @@ class ObjectStoreUploader < GitlabUploader end end - def schedule_migration_to_object_storage(new_file) - if self.class.object_store_enabled? && licensed? && file_storage? - ObjectStorageUploadWorker.perform_async(self.class.name, model.class.name, mounted_as, model.id) - end + def schedule_migration_to_object_storage(*args) + return unless self.class.object_store_enabled? + return unless self.class.background_upload_enabled? + return unless self.licensed? + return unless self.file_storage? + + ObjectStorageUploadWorker.perform_async(self.class.name, model.class.name, mounted_as, model.id) end def fog_directory diff --git a/app/workers/object_storage_upload_worker.rb b/app/workers/object_storage_upload_worker.rb index 0a374c4323f..0b9411ff2df 100644 --- a/app/workers/object_storage_upload_worker.rb +++ b/app/workers/object_storage_upload_worker.rb @@ -2,6 +2,8 @@ class ObjectStorageUploadWorker include Sidekiq::Worker include DedicatedSidekiqQueue + sidekiq_options retry: 5 + def perform(uploader_class_name, subject_class_name, file_field, subject_id) uploader_class = uploader_class_name.constantize subject_class = subject_class_name.constantize @@ -9,7 +11,9 @@ class ObjectStorageUploadWorker return unless uploader_class.object_store_enabled? return unless uploader_class.background_upload_enabled? - subject = subject_class.find(subject_id) + subject = subject_class.find_by(id: subject_id) + return unless subject + file = subject.public_send(file_field) # rubocop:disable GitlabSecurity/PublicSend return unless file.licensed? |