module SafePgMigrations::StatementRetrier

Constants

RETRIABLE_SCHEMA_STATEMENTS

Private Instance Methods

retry_if_lock_timeout() { || ... } click to toggle source
# File lib/safe-pg-migrations/plugins/statement_retrier.rb, line 18
def retry_if_lock_timeout
  remaining_tries = SafePgMigrations.config.max_tries
  begin
    remaining_tries -= 1
    yield
  rescue ActiveRecord::LockWaitTimeout
    raise if transaction_open? # Retrying is useless if we're inside a transaction.
    raise unless remaining_tries > 0

    retry_delay = SafePgMigrations.config.retry_delay
    SafePgMigrations.say "Retrying in #{retry_delay} seconds...", true
    sleep retry_delay
    SafePgMigrations.say 'Retrying now.', true
    retry
  end
end