Sha256: 947c8c472bc20b1a5c306c5f57ef3f5694692565c067dc50a206f72a578fd4bf

Contents?: true

Size: 952 Bytes

Versions: 1

Compression:

Stored size: 952 Bytes

Contents

require 'fresh_connection/abstract_connection_manager'

module FreshConnection
  class ConnectionManager < AbstractConnectionManager
    def slave_connection
      synchronize do
        slave_connections[current_thread_id] ||= new_connection
      end
    end

    def put_aside!
      synchronize do
        if c = slave_connections.delete(current_thread_id)
          c.disconnect! rescue nil
        end
      end
    end

    def recovery(failure_connection, exception)
      do_recovery = slave_down_message?(exception.message)
      put_aside! if do_recovery
      do_recovery
    end

    private

    def slave_connections
      @slave_connections ||= {}
    end

    def new_connection
      ActiveRecord::Base.send("mysql2_connection", spec)
    end

    def spec
      @spec ||= get_spec
    end

    def get_spec
      ret = ActiveRecord::Base.configurations[FreshConnection.env]
      ret.merge(ret[@slave_group] || {})
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fresh_connection-0.3.0 lib/fresh_connection/connection_manager.rb