summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2017-12-08 09:09:06 +0000
committerKamil Trzciński <ayufan@ayufan.eu>2018-02-28 20:45:07 +0100
commit87f11d2cf539d9539b439b54355f0dadaf4ebf76 (patch)
tree389f5bb28aabfe6a189795fa91611318bb272101 /app
parent6ca02a41500790b3e9061dd8836540955b9aaf7c (diff)
downloadgitlab-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.rb7
-rw-r--r--app/models/lfs_object.rb9
-rw-r--r--app/uploaders/lfs_object_uploader.rb1
-rw-r--r--app/uploaders/object_store_uploader.rb11
-rw-r--r--app/workers/object_storage_upload_worker.rb6
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?