class Bosh::Director::Worker

Public Class Methods

new(config, index=0) click to toggle source
# File lib/bosh/director/worker.rb, line 4
def initialize(config, index=0)
  @config = config
  @index = index
end

Public Instance Methods

prep() click to toggle source
# File lib/bosh/director/worker.rb, line 9
def prep
  Delayed::Worker.logger = @config.worker_logger

  Bosh::Director::App.new(@config)

  Delayed::Worker.backend = :sequel
  Delayed::Worker.destroy_failed_jobs = true
  Delayed::Worker.sleep_delay = ENV['INTERVAL'] || 1
  Delayed::Worker.max_attempts = 0
  Delayed::Worker.max_run_time = 31536000

  @delayed_job_worker = nil
  queues = (ENV['QUEUES'] || ENV['QUEUE']).to_s.split(',')
  queues << @config.director_pool unless @config.director_pool.nil? || (queues - ['urgent']).empty?

  @delayed_job_worker = Delayed::Worker.new({:queues => queues})
  trap('USR1') {
    @delayed_job_worker.queues = [ 'non_existent_queue' ]
  } #stop accepting new jobs when USR1 is sent
end
queues() click to toggle source
# File lib/bosh/director/worker.rb, line 49
def queues
  @delayed_job_worker.queues
end
start() click to toggle source
# File lib/bosh/director/worker.rb, line 30
def start
  @delayed_job_worker.name = "worker_#{@index}"
  @delayed_job_worker.logger.info("Starting worker #{@delayed_job_worker.name}.")

  begin
    @delayed_job_worker_retries ||= 0
    @delayed_job_worker.start
  rescue Exception => e
    @delayed_job_worker.logger.error("Something goes wrong during worker start. Attempt #{@delayed_job_worker_retries}. Error: #{e.inspect}")
    while @delayed_job_worker_retries < 10
      @delayed_job_worker_retries += 1
      sleep 0.5
      retry
    end
    @delayed_job_worker.logger.error("Max retries reached. Error: #{e.inspect}")
    raise e
  end
end