module FoundersToolkit::Jobs::LockedJob
Public Instance Methods
extend_lock(ttl)
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 45 def extend_lock(ttl) self.current_lock = locker.lock(lock_key, ttl, extend: current_lock, extend_only_if_locked: true) || current_lock end
lock(ttl:, enqueue_ttl: 3_600_000)
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 13 def lock(ttl:, enqueue_ttl: 3_600_000) before_enqueue do |_job| enqueue_lock = locker.lock(enqueue_lock_key, enqueue_ttl) throw :abort unless enqueue_lock persist_lock_info(enqueue_lock) end before_perform do |_job| enqueue_lock = get_lock_info if enqueue_lock locker.unlock(enqueue_lock) delete_lock_info end end around_perform do |job, block| self.current_lock = locker.lock(lock_key, ttl) if current_lock begin block.call ensure locker.unlock(current_lock) end else self.class.set(wait: ttl / 1000 / 2).perform_later(*job.arguments) end end end
Private Instance Methods
delete_lock_info()
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 65 def delete_lock_info Resque.redis.del(lock_info_key) end
enqueue_lock_key()
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 73 def enqueue_lock_key [self.class.name, 'enqueue'].concat(serialize['arguments']).join('-') end
get_lock_info()
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 58 def get_lock_info info = Resque.redis.get(lock_info_key) return unless info JSON.parse(info).symbolize_keys end
lock_info_key()
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 69 def lock_info_key "locked_job:#{job_id}" end
lock_key()
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 77 def lock_key [self.class.name].concat(serialize['arguments']).join('-') end
persist_lock_info(lock_info)
click to toggle source
# File lib/founders_toolkit/jobs/locked_job.rb, line 54 def persist_lock_info(lock_info) Resque.redis.set(lock_info_key, lock_info.to_json) end