class Barbeque::MessageHandler::JobRetry
Public Class Methods
new(message:, message_queue:)
click to toggle source
@param [Barbeque::Message::JobExecution] message @param [Barbeque::MessageQueue] message_queue
# File lib/barbeque/message_handler/job_retry.rb, line 12 def initialize(message:, message_queue:) @message = message @message_queue = message_queue end
Public Instance Methods
run()
click to toggle source
# File lib/barbeque/message_handler/job_retry.rb, line 17 def run job_retry = create_job_retry begin Executor.create.start_retry(job_retry, job_envs) rescue Exception => e job_retry.update!(status: :error, finished_at: Time.now) job_execution.update!(status: :error) Barbeque::ExecutionLog.save_stdout_and_stderr(job_retry, '', "#{e.class}: #{e.message}\n#{e.backtrace.join("\n")}") Barbeque::SlackNotifier.notify_job_retry(job_retry) raise e end end
Private Instance Methods
create_job_retry()
click to toggle source
# File lib/barbeque/message_handler/job_retry.rb, line 51 def create_job_retry Barbeque::JobRetry.transaction do Barbeque::JobRetry.create(message_id: @message.id, job_execution: job_execution).tap do @message_queue.delete_message(@message) end end rescue ActiveRecord::RecordNotUnique => e raise DuplicatedExecution.new(e.message) end
job_envs()
click to toggle source
# File lib/barbeque/message_handler/job_retry.rb, line 37 def job_envs if job_execution.execution_log.nil? raise MessageNotFound.new('failed to fetch retried message') end { 'BARBEQUE_JOB' => job_execution.job_definition.job, 'BARBEQUE_MESSAGE' => job_execution.execution_log['message'], 'BARBEQUE_MESSAGE_ID' => @message.retry_message_id, 'BARBEQUE_QUEUE_NAME' => @message_queue.job_queue.name, 'BARBEQUE_RETRY_COUNT' => job_execution.job_retries.count.to_s, } end
job_execution()
click to toggle source
# File lib/barbeque/message_handler/job_retry.rb, line 33 def job_execution @job_execution ||= Barbeque::JobExecution.find_by!(message_id: @message.retry_message_id) end