Redis configuration extraction #8439

pull/8535/head
Juan Ignacio Sánchez Lara 8 years ago
parent 7a30f18115
commit 694bf306f4

@ -2,17 +2,9 @@ require 'resque'
require 'resque/failure/base'
require 'resque/failure/multiple'
require 'resque/failure/redis'
require_dependency 'redis_factory'
# Load automatically all resque files from lib/resque
Dir[Rails.root.join("lib/resque/*.rb")].each {|f| require f}
conf = Cartodb.config[:redis].symbolize_keys
redis_conf = conf.select { |k, v| [:host, :port, :tcp_keepalive].include?(k) }
redis_conf[:connect_timeout] = 2
redis_conf[:read_timeout] = 3
redis_conf[:write_timeout] = 5
if redis_conf[:tcp_keepalive] and redis_conf[:tcp_keepalive].is_a? Hash
redis_conf[:tcp_keepalive] = redis_conf[:tcp_keepalive].symbolize_keys
end
Resque.redis = Redis.new(redis_conf)
Resque.redis = RedisFactory.new_connection

@ -1,3 +1,5 @@
require_dependency 'redis_factory'
if Cartodb.config[:redis].blank?
raise <<-MESSAGE
Please, configure Redis in your config/app_config.yml file like this:
@ -9,45 +11,11 @@ Please, configure Redis in your config/app_config.yml file like this:
MESSAGE
end
# Redis interfaces definition:
conf = Cartodb.config[:redis].symbolize_keys
# TODO: because of #8439 we're testing different Redis timeouts for connection, R and W.
# After getting a final solution timeout configuration should be read from the file again
redis_conf = conf.select { |k, v| [:host, :port, :driver, :tcp_keepalive].include?(k) }
redis_conf[:connect_timeout] = 2
redis_conf[:read_timeout] = 3
redis_conf[:write_timeout] = 5
if ENV['REDIS_PORT']
redis_conf[:port] = ENV['REDIS_PORT']
end
if redis_conf[:tcp_keepalive] and redis_conf[:tcp_keepalive].is_a? Hash
redis_conf[:tcp_keepalive] = redis_conf[:tcp_keepalive].symbolize_keys
end
if redis_conf[:driver] and redis_conf[:driver].is_a? String
redis_conf.merge! :driver => redis_conf[:driver].to_sym
end
default_databases = {
tables_metadata: 0,
api_credentials: 3,
users_metadata: 5,
redis_migrator_logs: 6
}
databases = if conf[:databases].blank?
default_databases
else
conf[:databases].symbolize_keys
end
$tables_metadata = Redis.new(redis_conf.merge(db: databases[:tables_metadata]))
$api_credentials = Redis.new(redis_conf.merge(db: databases[:api_credentials]))
$users_metadata = Redis.new(redis_conf.merge(db: databases[:users_metadata]))
$redis_migrator_logs = Redis.new(redis_conf.merge(db: databases[:redis_migrator_logs]))
$geocoder_metrics = Redis.new(redis_conf.merge(db: databases[:users_metadata]))
$tables_metadata = RedisFactory.new_connection(db_id: :tables_metadata)
$api_credentials = RedisFactory.new_connection(db_id: :api_credentials)
$users_metadata = RedisFactory.new_connection(db_id: :users_metadata)
$redis_migrator_logs = RedisFactory.new_connection(db_id: :redis_migrator_logs)
$geocoder_metrics = RedisFactory.new_connection(db_id: :users_metadata)
# When in the "test" environment we don't expect a Redis
# server to be up and running at this point. Later code

@ -0,0 +1,53 @@
class RedisFactory
# db_id: configuration databases entry key (:tables_metadata, :api_credentials...)
def self.new_connection(db_id: nil)
configuration = get_conf
configuration[:db] = databases[db_id] if db_id.present?
Redis.new(configuration)
end
def self.get_conf
# TODO: because of #8439 we're testing different Redis timeouts for connection, R and W.
# After getting a final solution timeout configuration should be read from the file again
redis_conf = conf.select { |k, _| [:host, :port, :driver, :tcp_keepalive].include?(k) }
redis_conf[:connect_timeout] = 2
redis_conf[:read_timeout] = 3
redis_conf[:write_timeout] = 5
if ENV['REDIS_PORT']
redis_conf[:port] = ENV['REDIS_PORT']
end
if redis_conf[:tcp_keepalive] and redis_conf[:tcp_keepalive].is_a? Hash
redis_conf[:tcp_keepalive] = redis_conf[:tcp_keepalive].symbolize_keys
end
if redis_conf[:driver] and redis_conf[:driver].is_a? String
redis_conf.merge! :driver => redis_conf[:driver].to_sym
end
redis_conf
end
def self.databases
if conf[:databases].blank?
@@default_databases
else
conf[:databases].symbolize_keys
end
end
@@default_databases = {
tables_metadata: 0,
api_credentials: 3,
users_metadata: 5,
redis_migrator_logs: 6
}.freeze
def self.conf
# Note that `symbolize_keys` creates a new instance, which is relevant to avoid side effects
Cartodb.config[:redis].symbolize_keys
end
private_class_method :get_conf
private_class_method :databases
end
Loading…
Cancel
Save