Class: SolidQueue::Execution

Inherits:
Record
  • Object
show all
Includes:
JobAttributes
Defined in:
lib/solid_queue_mongoid/models/classes.rb,
lib/solid_queue_mongoid/models/execution.rb,
lib/solid_queue_mongoid/models/execution/dispatching.rb,
lib/solid_queue_mongoid/models/execution/job_attributes.rb

Defined Under Namespace

Modules: Dispatching, JobAttributes Classes: UndiscardableError

Constant Summary

Constants inherited from Record

Record::INDEX_HINTS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Record

create_or_find_by!, find_by!, index, index_specifications, index_specifications=, inherited, non_blocking_lock, supports_insert_conflict_target?, transaction, use_index

Class Method Details

.create_all_from_jobs(jobs) ⇒ Object



16
17
18
19
20
21
22
23
# File 'lib/solid_queue_mongoid/models/execution.rb', line 16

def create_all_from_jobs(jobs)
  jobs.each do |job|
    attrs = attributes_from_job(job).merge(job_id: job.id)
    next if where(job_id: job.id).exists?

    create_or_find_by!(attrs)
  end
end

.discard_all_from_jobs(jobs) ⇒ Object



41
42
43
44
45
# File 'lib/solid_queue_mongoid/models/execution.rb', line 41

def discard_all_from_jobs(jobs)
  job_ids = jobs.map(&:id)
  discard_jobs(job_ids)
  where(:job_id.in => job_ids).delete_all
end

.discard_all_in_batches(batch_size: 500) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/solid_queue_mongoid/models/execution.rb', line 25

def discard_all_in_batches(batch_size: 500)
  pending = count
  discarded = 0

  loop do
    job_ids = limit(batch_size).order_by(job_id: :asc).pluck(:job_id)
    break if job_ids.empty?

    discarded = Job.where(:id.in => job_ids).delete_all
    where(:job_id.in => job_ids).delete_all
    pending -= discarded

    break if pending <= 0 || discarded.zero?
  end
end

.type ⇒ Object



12
13
14
# File 'lib/solid_queue_mongoid/models/execution.rb', line 12

def type
  model_name.element.sub("_execution", "").to_sym
end

Instance Method Details

#discard ⇒ Object



58
59
60
61
62
63
# File 'lib/solid_queue_mongoid/models/execution.rb', line 58

def discard
  SolidQueue.instrument(:discard, job_id: job_id, status: type) do
    job.destroy
    destroy
  end
end

#type ⇒ Object



54
55
56
# File 'lib/solid_queue_mongoid/models/execution.rb', line 54

def type
  self.class.type
end