summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/worker/unique.rb35
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