summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2017-08-17 13:53:39 +0000
committerDouwe Maan <douwe@gitlab.com>2017-08-17 13:53:39 +0000
commit91d3e6d9011edd19f980a8a0864ff0f673513011 (patch)
tree35e4828a2672de216c21beb98536ce3e270a97b9 /lib
parent2c528aad8667ec8cafd0040eb2f33594eec693e7 (diff)
parentf865b1b459b7c53eb57580246d8e20c4fd45f7fe (diff)
downloadgitlab-ce-91d3e6d9011edd19f980a8a0864ff0f673513011.tar.gz
Merge branch 'ee-2628-backport-to-ce' into 'master'
Backports EE mirror stuck handling featureā€¦ See merge request !13627
Diffstat (limited to 'lib')
-rw-r--r--lib/after_commit_queue.rb30
-rw-r--r--lib/gitlab/sidekiq_status.rb9
2 files changed, 37 insertions, 2 deletions
diff --git a/lib/after_commit_queue.rb b/lib/after_commit_queue.rb
new file mode 100644
index 00000000000..b67575a3ac2
--- /dev/null
+++ b/lib/after_commit_queue.rb
@@ -0,0 +1,30 @@
+module AfterCommitQueue
+ extend ActiveSupport::Concern
+
+ included do
+ after_commit :_run_after_commit_queue
+ after_rollback :_clear_after_commit_queue
+ end
+
+ def run_after_commit(method = nil, &block)
+ _after_commit_queue << proc { self.send(method) } if method
+ _after_commit_queue << block if block
+ true
+ end
+
+ protected
+
+ def _run_after_commit_queue
+ while action = _after_commit_queue.pop
+ self.instance_eval(&action)
+ end
+ end
+
+ def _after_commit_queue
+ @after_commit_queue ||= []
+ end
+
+ def _clear_after_commit_queue
+ _after_commit_queue.clear
+ end
+end
diff --git a/lib/gitlab/sidekiq_status.rb b/lib/gitlab/sidekiq_status.rb
index ca8d3271541..a0a2769cf9e 100644
--- a/lib/gitlab/sidekiq_status.rb
+++ b/lib/gitlab/sidekiq_status.rb
@@ -90,9 +90,14 @@ module Gitlab
#
# Returns an array of completed JIDs
def self.completed_jids(job_ids)
- Sidekiq.redis do |redis|
- job_ids.reject { |jid| redis.exists(key_for(jid)) }
+ statuses = job_status(job_ids)
+
+ completed = []
+ job_ids.zip(statuses).each do |job_id, status|
+ completed << job_id unless status
end
+
+ completed
end
def self.key_for(jid)