Module: ActiveRecordRetriable::ClassMethods

Defined in:
lib/active_record_retriable/retriable.rb

Instance Method Summary collapse

Instance Method Details

#transaction(retry_on: nil, num_retries: Rails.configuration.active_record.default_transaction_retries, before_retry: nil, **options, &block) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/active_record_retriable/retriable.rb', line 18

def transaction(retry_on: nil,
                num_retries: Rails.configuration.active_record.default_transaction_retries,
                before_retry: nil,
                **options, &block)
  return super(options, &block) if retry_on.blank?

  retry_on = Array.wrap(retry_on)
  total_retries = num_retries
  num_retries = 0
  begin
    super(options, &block)
  rescue *retry_on => e
    num_retries += 1
    if total_retries.nil? || num_retries <= total_retries
      before_retry&.call(num_retries, e)
      retry
    end
    raise
  end
end