Files
dataservices-api/server/extension/sql/0.5.0/10_redis_helper.sql
Mario de Frutos 9a36445661 Sentinel id could be removed safely from the config
Removing the sentinel_master_id property from the cdb_conf
redis config, the extension is going to use a single redis instance
instead of Sentinel
2016-02-26 10:49:10 +01:00

63 lines
2.6 KiB
PL/PgSQL

CREATE TYPE cdb_dataservices_server._redis_conf_params AS (
sentinel_master_id text,
redis_host text,
redis_port int,
redis_db text,
timeout float
);
-- Get the Redis configuration from the _conf table --
CREATE OR REPLACE FUNCTION cdb_dataservices_server._get_redis_conf_v2(config_key text)
RETURNS cdb_dataservices_server._redis_conf_params AS $$
conf_query = "SELECT cartodb.CDB_Conf_GetConf('{0}') as conf".format(config_key)
conf = plpy.execute(conf_query)[0]['conf']
if conf is None:
plpy.error("There is no redis configuration defined")
else:
import json
params = json.loads(conf)
redis_conf_params = {
"redis_host": params['redis_host'],
"redis_port": params['redis_port'],
"timeout": params['timeout'],
"redis_db": params['redis_db']
}
if "sentinel_master_id" in params:
redis_conf_params["sentinel_master_id"] = params["sentinel_master_id"]
else:
redis_conf_params["sentinel_master_id"] = None
return redis_conf_params
$$ LANGUAGE plpythonu;
-- Get the connection to redis from cache or create a new one
CREATE OR REPLACE FUNCTION cdb_dataservices_server._connect_to_redis(user_id text)
RETURNS boolean AS $$
cache_key = "redis_connection_{0}".format(user_id)
if cache_key in GD:
return False
else:
from cartodb_services.tools import RedisConnection
metadata_config_params = plpy.execute("""select c.sentinel_master_id, c.redis_host,
c.redis_port, c.timeout, c.redis_db
from cdb_dataservices_server._get_redis_conf_v2('redis_metadata_config') c;""")[0]
metrics_config_params = plpy.execute("""select c.sentinel_master_id, c.redis_host,
c.redis_port, c.timeout, c.redis_db
from cdb_dataservices_server._get_redis_conf_v2('redis_metrics_config') c;""")[0]
redis_metadata_connection = RedisConnection(metadata_config_params['sentinel_master_id'],
metadata_config_params['redis_host'],
metadata_config_params['redis_port'],
timeout=metadata_config_params['timeout'],
redis_db=metadata_config_params['redis_db']).redis_connection()
redis_metrics_connection = RedisConnection(metrics_config_params['sentinel_master_id'],
metrics_config_params['redis_host'],
metrics_config_params['redis_port'],
timeout=metrics_config_params['timeout'],
redis_db=metrics_config_params['redis_db']).redis_connection()
GD[cache_key] = {
'redis_metadata_connection': redis_metadata_connection,
'redis_metrics_connection': redis_metrics_connection,
}
return True
$$ LANGUAGE plpythonu SECURITY DEFINER;