class Bosh::Director::Jobs::DBJob

Attributes

job_class[R]
task_id[R]

Public Class Methods

new(job_class, task_id, args) click to toggle source
# File lib/bosh/director/jobs/db_job.rb, line 6
def initialize(job_class, task_id, args)
  unless job_class.kind_of?(Class) &&
      job_class <= Jobs::BaseJob
    raise DirectorError, "Invalid director job class `#{job_class}'"
  end
  raise DirectorError, "Invalid director job class `#{job_class}'. It should have `perform' method."  unless job_class.instance_methods(false).include?(:perform)
  @job_class = job_class
  @task_id = task_id
  @args = args
  raise DirectorError, "Invalid director job class `#{job_class}'. It should specify queue value." unless queue_name
end

Public Instance Methods

perform() click to toggle source
# File lib/bosh/director/jobs/db_job.rb, line 18
def perform
  if Models::Task.first(id: @task_id, state: 'queued').nil?
    raise DirectorError, "Cannot perform job for task #{@task_id} (not in 'queued' state)"
  end

  process_status = ForkedProcess.run do
    perform_args = []

    unless @args.nil?
      perform_args = decode(encode(@args))
    end

    @job_class.perform(@task_id, *perform_args)
  end

  if process_status.signaled?
    puts "Task #{@task_id} was terminated, marking as failed"
    fail_task
  end
end
queue_name() click to toggle source
# File lib/bosh/director/jobs/db_job.rb, line 39
def queue_name
  if (@job_class.instance_variable_get(:@local_fs) ||
      (@job_class.respond_to?(:local_fs) && @job_class.local_fs)) && !Config.director_pool.nil?
    Config.director_pool
  else
    @job_class.instance_variable_get(:@queue) ||
        (@job_class.respond_to?(:queue) && @job_class.queue)
  end
end

Private Instance Methods

decode(object) click to toggle source

Given a string, returns a Ruby object.

# File lib/bosh/director/jobs/db_job.rb, line 60
def decode(object)
  return unless object

  begin
    JSON.parse object
  rescue JSON::ParserError => e
    raise DecodeException, e.message, e.backtrace
  end
end
encode(object) click to toggle source
# File lib/bosh/director/jobs/db_job.rb, line 55
def encode(object)
  JSON.generate object
end
fail_task() click to toggle source
# File lib/bosh/director/jobs/db_job.rb, line 51
def fail_task
  Models::Task.first(id: @task_id).update(state: 'error')
end