class BatchKit::Database::Lock
Model for a lock
Public Class Methods
lock?(job_run, lock_name, lock_timeout, lock_holder = nil)
click to toggle source
# File lib/batch-kit/database/models.rb, line 487 def self.lock?(job_run, lock_name, lock_timeout, lock_holder = nil) lock_expires_at = nil self.dataset.db.transaction do lock_rec = self.where(lock_name: lock_name).first if lock_rec if lock_rec.lock_expires_at < Time.now self.where(lock_name: lock_name).delete lock_rec = nil else lock_job = JobRun.join(Job, :job_id => :job_id).where(job_run: lock_rec.job_run).first if lock_holder lock_holder[:lock_expires_at] = lock_rec.lock_expires_at.getlocal lock_holder[:lock_holder] = "job '#{lock_job[:job_name]}' (job run #{lock_rec.job_run})" end end end if lock_rec.nil? lock_expires_at = Time.now + lock_timeout if job_run.persist? self.new(lock_name: lock_name, job_run: job_run.job_run_id, lock_created_at: Time.now, lock_expires_at: lock_expires_at).save end end end lock_expires_at end
unlock?(job_run, lock_name)
click to toggle source
# File lib/batch-kit/database/models.rb, line 516 def self.unlock?(job_run, lock_name) unlocked = false if job_run.persist? self.where(lock_name: lock_name, job_run: job_run.job_run_id).delete unlocked = true end unlocked end