Sha256: b998cc0793e0f4116f96e6418c0bd461777d676bf3a70f5515feb14ab15f6135

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

module ActiveRecord
  module ConnectionAdapters
    class AbstractAdapter
      def select_all_with_slave_connection(arel, name = nil, binds = [])
        if FreshConnection::SlaveConnection.slave_access?
          change_connection {select_all_without_slave_connection(arel, "[slave] #{name}", binds)}
        else
          select_all_without_slave_connection(arel, name, binds)
        end
      end
      alias_method_chain :select_all, :slave_connection

      private

      def change_connection
        retry_count = 0
        master_connection = @connection
        begin
          slave_connection = FreshConnection::SlaveConnection.slave_connection
          @connection = slave_connection.raw_connection
          yield
        rescue ActiveRecord::StatementInvalid => exception
          if FreshConnection::SlaveConnection.recovery(slave_connection, exception)
            retry_count += 1
            retry if retry_count < FreshConnection::SlaveConnection.retry_limit
          end

          raise
        end
      ensure
        @connection = master_connection
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fresh_connection-0.1.8 lib/fresh_connection/active_record/abstract_adapter.rb
fresh_connection-0.1.7 lib/fresh_connection/active_record/abstract_adapter.rb