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