diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2018-04-13 10:20:07 +0200 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2018-04-19 12:09:51 +0200 |
commit | a28f25b565c58088d80545ebe483f8cd25c22c10 (patch) | |
tree | b2d1c6ff5e0c5bbed3b1f594c07eff1a9ba997c6 /app/models | |
parent | 2c7c8db6a52fb324d72ce14c1c77212826a86b6a (diff) | |
download | gitlab-ce-a28f25b565c58088d80545ebe483f8cd25c22c10.tar.gz |
Fix direct_upload when records with null file_store are used
Old records have a null value of file_store column.
This causes the problems with current direct_upload implementation,
as this makes it to choose Store::REMOTE instead of Store::LOCAL.
This change moves the store save when change saving the object.
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/ci/job_artifact.rb | 11 | ||||
-rw-r--r-- | app/models/lfs_object.rb | 6 |
2 files changed, 11 insertions, 6 deletions
diff --git a/app/models/ci/job_artifact.rb b/app/models/ci/job_artifact.rb index f846482cdeb..39676efa08c 100644 --- a/app/models/ci/job_artifact.rb +++ b/app/models/ci/job_artifact.rb @@ -7,14 +7,15 @@ module Ci belongs_to :project belongs_to :job, class_name: "Ci::Build", foreign_key: :job_id - before_save :update_file_store + mount_uploader :file, JobArtifactUploader + before_save :set_size, if: :file_changed? after_save :update_project_statistics_after_save, if: :size_changed? after_destroy :update_project_statistics_after_destroy, unless: :project_destroyed? - scope :with_files_stored_locally, -> { where(file_store: [nil, ::JobArtifactUploader::Store::LOCAL]) } + after_save :update_file_store - mount_uploader :file, JobArtifactUploader + scope :with_files_stored_locally, -> { where(file_store: [nil, ::JobArtifactUploader::Store::LOCAL]) } delegate :exists?, :open, to: :file @@ -25,7 +26,9 @@ module Ci } def update_file_store - self.file_store = file.object_store + # The file.object_store is set during `uploader.store!` + # which happens after object is inserted/updated + self.update_column(:file_store, file.object_store) end def self.artifacts_size_for(project) diff --git a/app/models/lfs_object.rb b/app/models/lfs_object.rb index b7de46fa202..6b7f280fb70 100644 --- a/app/models/lfs_object.rb +++ b/app/models/lfs_object.rb @@ -11,10 +11,12 @@ class LfsObject < ActiveRecord::Base mount_uploader :file, LfsObjectUploader - before_save :update_file_store + after_save :update_file_store def update_file_store - self.file_store = file.object_store + # The file.object_store is set during `uploader.store!` + # which happens after object is inserted/updated + self.update_column(:file_store, file.object_store) end def project_allowed_access?(project) |