Sha256: d09a06678aaa06e59029e076c4d8cf631c7784269d0080452029a8d8de6454bc
Contents?: true
Size: 1.08 KB
Versions: 1
Compression:
Stored size: 1.08 KB
Contents
module Asyncapi::Server class JobWorker include Sidekiq::Worker sidekiq_options retry: false MAX_RETRIES = 2 def perform(job_id, retries=0) job = Job.find(job_id) runner_class = job.class_name.constantize job_status = :success job_message = runner_class.call(job.params) rescue => e job_status = :error job_message = [e.message, e.backtrace].flatten.join("\n") raise e ensure if job job.update_attributes(status: job_status) report_job_status(job, job_message) else # For some reason "ActiveRecord::Base.after_transaction", # ":after_commit" and ":after_create" does not prevent # the ActiveRecord-Sidekiq race condition. In order to # prevent this just retry running JobWorker until it finds # the job by job_id. if retries <= MAX_RETRIES JobWorker.perform_async(job_id, retries+1) end end end private def report_job_status(job, job_message) JobStatusNotifierWorker.perform_async(job.id, job_message) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
asyncapi-server-1.3.0 | app/workers/asyncapi/server/job_worker.rb |