Module: ActiveJob::Temporal::DeadLetterQueue

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

Constant Summary collapse

WORKFLOW_TYPE =
WorkflowTypes::DEAD_LETTER
DEFAULT_ENTRIES_LIMIT =
100
ENTRY_QUERY_CONCURRENCY =
5

Class Method Summary collapse

Class Method Details

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

rubocop:disable Naming/PredicateMethod



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

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



22
23
24
25
26
27
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 22

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

  workflows = client.list_workflows(entries_query(queue)).first(limit)
  query_workflow_entries(client, workflows)
end

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



18
19
20
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 18

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



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 29

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)
  if retried_entry?(entry)
    workflow_id = entry.fetch("retry_workflow_id")
    log_retry_requested(entry, workflow_id, queue, duplicate: true)
    return workflow_id
  end

  ensure_pending_entry!(entry)

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

.workflow_id(job_class, job_id) ⇒ Object

rubocop:enable Naming/PredicateMethod



54
55
56
57
# File 'lib/activejob/temporal/dead_letter_queue.rb', line 54

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