33 lines
711 B
Ruby
33 lines
711 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module Database
|
||
|
module QueueErrorHandlingConcern
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
MAX_LAST_ERROR_LENGTH = 10_000
|
||
|
|
||
|
included do
|
||
|
validates :last_error, length: { maximum: MAX_LAST_ERROR_LENGTH },
|
||
|
if: ->(record) { record.respond_to?(:last_error) }
|
||
|
end
|
||
|
|
||
|
def handle_exception!(error)
|
||
|
transaction do
|
||
|
increment!(:attempts)
|
||
|
update!(last_error: format_last_error(error))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def format_last_error(error)
|
||
|
[error.message]
|
||
|
.concat(error.backtrace)
|
||
|
.join("\n")
|
||
|
.truncate(MAX_LAST_ERROR_LENGTH)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|