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