diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-10-21 09:44:35 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2016-10-21 09:44:35 +0200 |
commit | 1dc34b714cc18264e73a8e4d722b067d155d8ab1 (patch) | |
tree | 2310448800d21ce631cbf67d744352fdd6a9fbcd /lib | |
parent | 04f731f3ada7c8ff7832275f6838ea687c7f6bbe (diff) | |
download | gitlab-ce-fix/improve-concurrent-pipeline-processing.tar.gz |
Schedule pipeline worker only when it is uniquefix/improve-concurrent-pipeline-processing
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/worker/unique.rb | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/lib/gitlab/worker/unique.rb b/lib/gitlab/worker/unique.rb index 708d6eb2e05..9adbdaa72f4 100644 --- a/lib/gitlab/worker/unique.rb +++ b/lib/gitlab/worker/unique.rb @@ -2,27 +2,30 @@ require 'digest' module Gitlab module Worker - module Unique - def unique_processing(*args) - key, timeout = uuid(args), 1.hour.to_i + class Unique + def initialize(worker, *args) + @worker = worker + @args = args + end - Gitlab::ExclusiveLease.new(key, timeout: timeout).tap do |lease| - break unless lease.try_obtain + def uuid + @uuid ||= Digest::SHA1 + .hexdigest(@worker.name + @args.to_json) + end - begin - yield - rescue - raise - ensure - lease.cancel! - end - end + def lease + @lease ||= Gitlab::ExclusiveLease + .new(uuid, timeout: 1.hour.to_i) end - private + def schedule! + if lease.try_obtain + @worker.perform_async(*@args) + end + end - def uuid(args) - Digest::SHA1.hexdigest(self.class.name + args.to_json) + def release! + lease.cancel! end end end |