Sha256: 193ac14bb8d1f00426b8c26f6af19db00133a42d41194216040e6cee1dfb67b4

Contents?: true

Size: 1.08 KB

Versions: 7

Compression:

Stored size: 1.08 KB

Contents

require 'fresh_connection/access_control'

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

      def self.prepended(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

7 entries across 7 versions & 1 rubygems

Version Path
fresh_connection-0.4.4 lib/fresh_connection/extend/mysql2_adapter.rb
fresh_connection-1.0.1 lib/fresh_connection/extend/mysql2_adapter.rb
fresh_connection-1.0.0 lib/fresh_connection/extend/mysql2_adapter.rb
fresh_connection-0.4.3 lib/fresh_connection/extend/mysql2_adapter.rb
fresh_connection-0.4.2 lib/fresh_connection/extend/mysql2_adapter.rb
fresh_connection-0.4.1 lib/fresh_connection/extend/mysql2_adapter.rb
fresh_connection-0.4.0 lib/fresh_connection/extend/mysql2_adapter.rb