class Replidog::ProxyHandler

Public Class Methods

new() click to toggle source
# File lib/replidog/proxy_handler.rb, line 5
def initialize
  @proxies = Concurrent::Map.new(initial_capacity: 2)
  @class_to_proxy = Concurrent::Map.new(initial_capacity: 2)
end

Public Instance Methods

clear_active_slave_connections!() click to toggle source
# File lib/replidog/proxy_handler.rb, line 36
def clear_active_slave_connections!
  @proxies.each_value do |proxy|
    proxy.clear_active_slave_connections!
  end
end
clear_all_slave_connections!() click to toggle source
# File lib/replidog/proxy_handler.rb, line 48
def clear_all_slave_connections!
  @proxies.each_value do |proxy|
    proxy.clear_all_slave_connections!
  end
end
clear_query_cache() click to toggle source
# File lib/replidog/proxy_handler.rb, line 68
def clear_query_cache
  connection_pool_list_for(ActiveRecord::Base.connection_handler).each do |connection_pool|
    connection_pool.connection.clear_query_cache
  end
  @proxies.each_value(&:clear_query_cache_for_slaves)
end
clear_reloadable_slave_connections!() click to toggle source
# File lib/replidog/proxy_handler.rb, line 42
def clear_reloadable_slave_connections!
  @proxies.each_value do |proxy|
    proxy.clear_reloadable_slave_connections!
  end
end
disable_query_cache!() click to toggle source
# File lib/replidog/proxy_handler.rb, line 61
def disable_query_cache!
  connection_pool_list_for(ActiveRecord::Base.connection_handler).each do |connection_pool|
    connection_pool.connection.disable_query_cache!
  end
  @proxies.each_value(&:disable_query_cache_for_slaves!)
end
enable_query_cache!() click to toggle source
# File lib/replidog/proxy_handler.rb, line 54
def enable_query_cache!
  connection_pool_list_for(ActiveRecord::Base.connection_handler).each do |connection_pool|
    connection_pool.connection.enable_query_cache!
  end
  @proxies.each_value(&:enable_query_cache_for_slaves!)
end
establish_connection(configuration, klass) click to toggle source
# File lib/replidog/proxy_handler.rb, line 10
def establish_connection(configuration, klass)
  @class_to_proxy.clear
  raise RuntimeError, "Anonymous class is not allowed." unless klass.name
  @proxies[klass.name] = Proxy.new(self, configuration)
end
remove_connection(klass) click to toggle source
# File lib/replidog/proxy_handler.rb, line 28
def remove_connection(klass)
  if proxy = @proxies.delete(klass.name)
    @class_to_proxy.clear
    proxy.clear_all_slave_connections!
    proxy.configuration.config
  end
end
retrieve_proxy(klass) click to toggle source
# File lib/replidog/proxy_handler.rb, line 16
def retrieve_proxy(klass)
  @class_to_proxy[klass.name] ||=
    begin
      until proxy = @proxies[klass.name]
        klass = klass.superclass
        break unless klass <= ActiveRecord::Base
      end

      @class_to_proxy[klass.name] = proxy
    end
end

Private Instance Methods

connection_pool_list_for(connection_handler) click to toggle source
# File lib/replidog/proxy_handler.rb, line 77
def connection_pool_list_for(connection_handler)
  if ActiveRecord::VERSION::MAJOR >= 4
    connection_handler.connection_pool_list
  else
    connection_handler.connection_pools.values
  end
end