Class: BatchKit::Database::Lock

Inherits:
Object
  • Object
show all
Defined in:
lib/batch-kit/database/models.rb

Overview

Model for a lock

Class Method Summary collapse

Class Method Details

.lock?(job_run, lock_name, lock_timeout, lock_holder = nil) ⇒ Boolean

Returns:

  • (Boolean)


487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
# 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) ⇒ Boolean

Returns:

  • (Boolean)


516
517
518
519
520
521
522
523
524
# 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