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