Module: ActiveJob::Temporal::DeadLetterQueue

Defined in:
lib/activejob/temporal/dead_letter_queue.rb

Constant Summary collapse

WORKFLOW_TYPE =
"ActiveJobTemporalDeadLetterWorkflow"
DEFAULT_ENTRIES_LIMIT =
100

Class Method Summary collapse

Class Method Details

.discard(job_class, job_id, reason: nil, client: ActiveJob::Temporal.client) ⇒ Object

rubocop:disable Naming/PredicateMethod



41
42
43
44
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 41

def discard(job_class, job_id, reason: nil, client: ActiveJob::Temporal.client)
  handle_for(job_class, job_id, client: client).signal(:discard, reason)
  true
end

.entries(queue: nil, limit: DEFAULT_ENTRIES_LIMIT, client: ActiveJob::Temporal.client) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 17

def entries(queue: nil, limit: DEFAULT_ENTRIES_LIMIT, client: ActiveJob::Temporal.client)
  validate_limit!(limit)

  client.list_workflows(entries_query(queue)).each_with_object([]) do |workflow, entries|
    entry = query_workflow_entry(client, workflow)
    entries << entry if entry
    break entries if entries.size >= limit
  end
end

.entry(job_class, job_id, run_id: nil, client: ActiveJob::Temporal.client) ⇒ Object



13
14
15
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 13

def entry(job_class, job_id, run_id: nil, client: ActiveJob::Temporal.client)
  handle_for(job_class, job_id, run_id: run_id, client: client).query(:entry)
end

.retry(job_class, job_id, queue: nil, client: ActiveJob::Temporal.client) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 27

def retry(job_class, job_id, queue: nil, client: ActiveJob::Temporal.client)
  handle = handle_for(job_class, job_id, client: client)
  entry = handle.query(:entry)
  return entry.fetch("retry_workflow_id") if retried_entry?(entry)

  ensure_pending_entry!(entry)

  workflow_id = retry_workflow_id(entry)
  start_retry_workflow(client, entry, workflow_id, queue)
  mark_retried_entry(handle, workflow_id)
  workflow_id
end

.workflow_id(job_class, job_id) ⇒ Object

rubocop:enable Naming/PredicateMethod



47
48
49
50
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 47

def workflow_id(job_class, job_id)
  class_name = job_class.is_a?(Class) ? job_class.name : job_class.to_s
  "ajdlq:#{class_name}:#{job_id}"
end