diff options
author | Douwe Maan <douwe@selenight.nl> | 2018-02-23 16:25:48 +0100 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2018-02-23 16:25:52 +0100 |
commit | 43a359ab78b8282bb541cc14bec02e8a3eece8cb (patch) | |
tree | c2a191717bbbe4a4a154f1c228d19cd1c13d1797 /app | |
parent | e610f9604ecd186ae37862894a4f4b7c706d0ce5 (diff) | |
download | gitlab-ce-43a359ab78b8282bb541cc14bec02e8a3eece8cb.tar.gz |
Verify project import status again before marking as failed
Diffstat (limited to 'app')
-rw-r--r-- | app/workers/stuck_import_jobs_worker.rb | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/app/workers/stuck_import_jobs_worker.rb b/app/workers/stuck_import_jobs_worker.rb index 4fbcfeae69c..fbb14efc525 100644 --- a/app/workers/stuck_import_jobs_worker.rb +++ b/app/workers/stuck_import_jobs_worker.rb @@ -22,25 +22,23 @@ class StuckImportJobsWorker end def mark_projects_with_jid_as_failed! - completed_jids_count = 0 + jids_and_ids = enqueued_projects_with_jid.pluck(:import_jid, :id).to_h - enqueued_projects_with_jid.find_in_batches(batch_size: 500) do |group| - jids = group.map(&:import_jid) + # Find the jobs that aren't currently running or that exceeded the threshold. + completed_jids = Gitlab::SidekiqStatus.completed_jids(jids_and_ids.keys) + return unless completed_jids.any? - # Find the jobs that aren't currently running or that exceeded the threshold. - completed_jids = Gitlab::SidekiqStatus.completed_jids(jids).to_set + completed_project_ids = jids_and_ids.values_at(*completed_jids) - if completed_jids.any? - completed_jids_count += completed_jids.count - group.each do |project| - project.mark_import_as_failed(error_message) if completed_jids.include?(project.import_jid) - end + # We select the projects again, because they may have transitioned from + # scheduled/started to finished/failed while we were looking up their Sidekiq status. + completed_projects = enqueued_projects_with_jid.where(id: completed_project_ids) - Rails.logger.info("Marked stuck import jobs as failed. JIDs: #{completed_jids.to_a.join(', ')}") - end - end + Rails.logger.info("Marked stuck import jobs as failed. JIDs: #{completed_projects.map(&:import_jid).join(', ')}") - completed_jids_count + completed_projects.each do |project| + project.mark_import_as_failed(error_message) + end.count end def enqueued_projects |