Class: Bosh::Director::Jobs::DBJob

Inherits:
Object
  • Object
show all
Defined in:
lib/bosh/director/jobs/db_job.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(job_class, task_id, args) ⇒ DBJob

Returns a new instance of DBJob.

Raises:



6
7
8
9
10
11
12
13
14
15
16
# 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

Instance Attribute Details

#job_classObject (readonly)

Returns the value of attribute job_class.



4
5
6
# File 'lib/bosh/director/jobs/db_job.rb', line 4

def job_class
  @job_class
end

#task_idObject (readonly)

Returns the value of attribute task_id.



4
5
6
# File 'lib/bosh/director/jobs/db_job.rb', line 4

def task_id
  @task_id
end

Instance Method Details

#performObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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_nameObject



39
40
41
42
43
44
45
46
47
# 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