Class: CanvasSync::Jobs::ForkGather

Inherits:
CanvasSync::Job show all
Defined in:
lib/canvas_sync/jobs/fork_gather.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from CanvasSync::Job

#create_job_log, #report_checker_wait_time, #update_or_create_model

Class Method Details

.handle_branch_error(e, job_chain:, skip_invoke: false, **kwargs) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/canvas_sync/jobs/fork_gather.rb', line 24

def self.handle_branch_error(e, job_chain:, skip_invoke: false, **kwargs)
  return nil unless job_chain&.[](:global_options)&.[](:fork_path).present?

  duped_chain = CanvasSync.duplicate_chain(job_chain)
  job_list = duped_chain[:jobs]
  while job_list.count > 0
    job_class_name = job_list[0][:job]
    job_class = job_class_name.constantize
    break if job_class <= CanvasSync::Jobs::ForkGather
    job_list.shift
  end

  return nil unless job_list.present?

  if skip_invoke
    duped_chain
  else
    CanvasSync.invoke_next(duped_chain)
    true
  end
end

Instance Method Details

#perform(job_chain, options) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/canvas_sync/jobs/fork_gather.rb', line 4

def perform(job_chain, options)
  forked_job = self.class.forked_at_job(job_chain)

  if forked_job.present?
    forked_job.with_lock do
      forked_job.fork_count -= 1
      forked_job.save!
    end

    if forked_job.fork_count <= 0
      (job_chain[:global_options][:fork_keys] || []).pop&.each do |k|
        job_chain[:global_options].delete(k.to_sym)
      end
      CanvasSync.invoke_next(job_chain)
    end
  else
    CanvasSync.invoke_next(job_chain)
  end
end