Class: Delayed::Backend::CouchrestModel::Job

Inherits:
CouchRest::Model::Base
  • Object
show all
Includes:
Base
Defined in:
lib/delayed/backend/couchrest_model.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.clear_locks!(worker_name) ⇒ Object



42
43
44
45
46
# File 'lib/delayed/backend/couchrest_model.rb', line 42

def self.clear_locks!(worker_name)
  jobs = my_jobs worker_name
  jobs.each { |j| j.locked_by, j.locked_at = nil, nil; }
  database.bulk_save jobs
end

.db_time_nowObject



32
# File 'lib/delayed/backend/couchrest_model.rb', line 32

def self.db_time_now; Time.now.utc; end

.delete_allObject



47
48
49
# File 'lib/delayed/backend/couchrest_model.rb', line 47

def self.delete_all
  database.bulk_save all.each { |doc| doc['_deleted'] = true }
end

.find_available(worker_name, limit = 5, max_run_time = ::Delayed::Worker.max_run_time) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/delayed/backend/couchrest_model.rb', line 33

def self.find_available(worker_name, limit = 5, max_run_time = ::Delayed::Worker.max_run_time)
  ready = ready_jobs
  mine = my_jobs worker_name
  expire = expired_jobs max_run_time
  jobs = (ready + mine + expire)[0..limit-1].sort_by { |j| j.priority }
  jobs = jobs.find_all { |j| j.priority >= Worker.min_priority } if Worker.min_priority
  jobs = jobs.find_all { |j| j.priority <= Worker.max_priority } if Worker.max_priority
  jobs
end

Instance Method Details

#lock_exclusively!(max_run_time, worker = worker_name) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/delayed/backend/couchrest_model.rb', line 51

def lock_exclusively!(max_run_time, worker = worker_name)
  return false if locked_by_other?(worker) and not expired?(max_run_time)
  case
  when locked_by_me?(worker)
    self.locked_at = self.class.db_time_now
  when (unlocked? or (locked_by_other?(worker) and expired?(max_run_time)))
    self.locked_at, self.locked_by = self.class.db_time_now, worker
  end
  save
rescue RestClient::Conflict
  false
end