Sha256: 5e22dc7c58833212d36f1983c1e900135840586e3d88ddbbef24f9aae5f833fa

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

module FreshConnection
  module Extend
    module Mysql2Adapter
      RETRY_LIMIT = 3
      private_constant :RETRY_LIMIT

      def self.included(base)
        base.__send__(:attr_writer, :model_class)
      end

      def select_all(arel, name = nil, binds = [])
        if FreshConnection::AccessControl.slave_access?
          change_connection do
            super(arel, "[#{@model_class.slave_group}] #{name}", binds)
          end
        else
          super
        end
      end

      private

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

          raise
        end
      ensure
        @connection = master_connection
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fresh_connection-0.3.0 lib/fresh_connection/extend/mysql2_adapter.rb