class Bosh::Director::DeploymentPlan::BatchMultiJobUpdater

Public Class Methods

new(job_updater_factory) click to toggle source
# File lib/bosh/director/deployment_plan/multi_job_updater.rb, line 42
def initialize(job_updater_factory)
  @job_updater_factory = job_updater_factory
end

Public Instance Methods

run(base_job, deployment_plan, jobs) click to toggle source
# File lib/bosh/director/deployment_plan/multi_job_updater.rb, line 46
def run(base_job, deployment_plan, jobs)
  serial_updater = SerialMultiJobUpdater.new(@job_updater_factory)
  parallel_updater = ParallelMultiJobUpdater.new(@job_updater_factory)

  partition_jobs_by_serial(jobs).each do |jp|
    updater = jp.first.update.serial? ? serial_updater : parallel_updater
    updater.run(base_job, deployment_plan, jp)
  end
end

Private Instance Methods

partition_jobs_by_serial(jobs) click to toggle source
# File lib/bosh/director/deployment_plan/multi_job_updater.rb, line 58
def partition_jobs_by_serial(jobs)
  job_partitions = []
  last_partition = []

  jobs.each do |j|
    lastj = last_partition.last
    if !lastj || lastj.update.serial? == j.update.serial?
      last_partition << j
    else
      job_partitions << last_partition
      last_partition = [j]
    end
  end

  job_partitions << last_partition if last_partition.any?
  job_partitions
end