diff options
author | Michael Kozono <mkozono@gmail.com> | 2017-11-07 20:15:28 -0800 |
---|---|---|
committer | Michael Kozono <mkozono@gmail.com> | 2017-12-01 15:26:40 -0800 |
commit | 3dc74378ec54afb4b15d9f1bdf3781ddd50f83e3 (patch) | |
tree | 88729b31d44ca044d4eb34a3a5d8e34601476c68 /lib | |
parent | 1bae010b63f0bcff79f32ce99190f2d5b6d9fbcd (diff) | |
download | gitlab-ce-3dc74378ec54afb4b15d9f1bdf3781ddd50f83e3.tar.gz |
Allow individual failures
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/background_migration/populate_untracked_uploads.rb | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/lib/gitlab/background_migration/populate_untracked_uploads.rb b/lib/gitlab/background_migration/populate_untracked_uploads.rb index 1773b53bd68..934431ccddd 100644 --- a/lib/gitlab/background_migration/populate_untracked_uploads.rb +++ b/lib/gitlab/background_migration/populate_untracked_uploads.rb @@ -97,28 +97,18 @@ module Gitlab end def uploader - PATH_PATTERNS.each do |path_pattern_map| - if path_relative_to_upload_dir.match(path_pattern_map[:pattern]) - return path_pattern_map[:uploader] - end - end + matching_pattern_map[:uploader] end def model_type - PATH_PATTERNS.each do |path_pattern_map| - if path_relative_to_upload_dir.match(path_pattern_map[:pattern]) - return path_pattern_map[:model_type] - end - end + matching_pattern_map[:model_type] end def model_id - PATH_PATTERNS.each do |path_pattern_map| - matchd = path_relative_to_upload_dir.match(path_pattern_map[:pattern]) + matchd = path_relative_to_upload_dir.match(matching_pattern_map[:pattern]) - # If something is captured (matchd[1] is not nil), it is a model_id - return matchd[1] if matchd && matchd[1] - end + # If something is captured (matchd[1] is not nil), it is a model_id + return matchd[1] if matchd[1] # Only the FileUploader pattern will not match an ID file_uploader_model_id @@ -140,6 +130,16 @@ module Gitlab private + def matching_pattern_map + @matching_pattern_map ||= PATH_PATTERNS.find do |path_pattern_map| + path_relative_to_upload_dir.match(path_pattern_map[:pattern]) + end + + raise "Unknown upload path pattern \"#{path}\"" unless @matching_pattern_map + + @matching_pattern_map + end + def file_uploader_model_id pattern_to_capture_full_path = /\A(.+)#{FILE_UPLOADER_PATH_PATTERN}/ matchd = path_relative_to_upload_dir.match(pattern_to_capture_full_path) @@ -222,7 +222,15 @@ module Gitlab files = UnhashedUploadFile.untracked.where(id: start_id..end_id) files.each do |unhashed_upload_file| - unhashed_upload_file.ensure_tracked! + begin + unhashed_upload_file.ensure_tracked! + rescue StandardError => e + Rails.logger.warn "Failed to add untracked file to uploads: #{e.message}" + + # The untracked rows will remain in the DB. We will be able to see + # which ones failed to become tracked, and then we can decide what + # to do. + end end end |