Class: CanvasSync::JobBatches::SerialBatchJob

Inherits:
BaseJob
  • Object
show all
Defined in:
lib/canvas_sync/job_batches/jobs/serial_batch_job.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cleanup_redis(status, options) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/canvas_sync/job_batches/jobs/serial_batch_job.rb', line 33

def self.cleanup_redis(status, options)
  serial_id = options['serial_batch_id']
  Batch.redis do |r|
    r.del(
      "SERBID-#{serial_id}",
      "SERBID-#{serial_id}-jobs",
    )
  end
end

.job_succeeded_callback(status, options) ⇒ Object



43
44
45
46
# File 'lib/canvas_sync/job_batches/jobs/serial_batch_job.rb', line 43

def self.job_succeeded_callback(status, options)
  serial_id = options['serial_batch_id']
  perform_next_sequence_job(serial_id)
end

Instance Method Details

#perform(sub_jobs, context: nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/canvas_sync/job_batches/jobs/serial_batch_job.rb', line 6

def perform(sub_jobs, context: nil)
  serial_id = SecureRandom.urlsafe_base64(10)

  root_batch = Batch.new

  Batch.redis do |r|
    r.multi do
      mapped_sub_jobs = sub_jobs.map do |j|
        j = ActiveJob::Arguments.serialize([j])
        JSON.unparse(j)
      end
      r.hset("SERBID-#{serial_id}", "root_bid", root_batch.bid)
      r.expire("SERBID-#{serial_id}", Batch::BID_EXPIRE_TTL)
      r.rpush("SERBID-#{serial_id}-jobs", mapped_sub_jobs)
      r.expire("SERBID-#{serial_id}-jobs", Batch::BID_EXPIRE_TTL)
    end
  end

  root_batch.description = "Serial Batch Root (#{serial_id})"
  root_batch.allow_context_changes = true
  root_batch.context = context
  root_batch.on(:success, "#{self.class.to_s}.cleanup_redis", serial_batch_id: serial_id)
  root_batch.jobs {}

  self.class.perform_next_sequence_job(serial_id)
end