cartodb/lib/resque/base_job.rb

45 lines
1.1 KiB
Ruby
Raw Normal View History

2020-06-15 10:58:47 +08:00
require 'sequel'
require 'resque-metrics'
module Resque
class BaseJob
extend ::Resque::Metrics
MAX_RETRIES = 3
@@queue = ''
@@retries = 0
def self.perform(options = {})
raise NotImplementedError("This class shouldn't be directly instantiated")
end
def self.run_action(options, queue_name, action)
@@queue = queue_name
begin
action.call(options)
rescue Sequel::DatabaseDisconnectError => e
puts "DatabaseDisconnectError: #{e.message}"
regexps = [ /server has gone away/, /decryption failed or bad record mac/, /SSL SYSCALL error: EOF detected/ ]
match_found = regexps.map { |regexp| regexp.match(e.message) }.any? { |matches| matches }
if (match_found)
@@retries += 1
if (@@retries < MAX_RETRIES)
puts 'Retrying'
retry
else
raise e
end
else
raise e
end
rescue => e
CartoDB.notify_exception(e)
raise e
end
end #self.perform
end #BaseJobs
end