def init(self): config = {} self.has_sentinel = has_redis_sentinels(self.config) if self.has_sentinel: sentinels = self._parse_sentinels(self.config.get('redis_sentinels')) if not sentinels: raise ValueError('kvdb.redis_sentinels must be provided') sentinel_master = self.config.get('redis_sentinels_master', None) if not sentinel_master: raise ValueError('kvdb.redis_sentinels_master must be provided') config['sentinels'] = sentinels config['sentinel_master'] = sentinel_master else: if self.config.get('host'): config['host'] = self.config.host if self.config.get('port'): config['port'] = int(self.config.port) if self.config.get('unix_socket_path'): config['unix_socket_path'] = self.config.unix_socket_path if self.config.get('db'): config['db'] = int(self.config.db) if self.config.get('password'): config['password'] = self.decrypt_func(self.config.password) if self.config.get('socket_timeout'): config['socket_timeout'] = float(self.config.socket_timeout) if self.config.get('connection_pool'): split = self.config.connection_pool.split('.') module, class_name = split[:-1], split[-1] mod = import_module(module) config['connection_pool'] = getattr(mod, class_name) if self.config.get('charset'): config['charset'] = self.config.charset if self.config.get('errors'): config['errors'] = self.config.errors self.conn_class = self._get_connection_class() if self.has_sentinel: instance = self.conn_class(config['sentinels'], config.get('password'), config.get('socket_timeout')) self.conn = instance.master_for(config['sentinel_master']) else: self.conn = self.conn_class(**config) self.lua_container.kvdb = self.conn
def handle(self): config = self.server.fs_server_config.kvdb sleep_time = float(config.log_connection_info_sleep_time) has_sentinels = has_redis_sentinels(config) if kvdb_logger.isEnabledFor(DEBUG): while True: if has_sentinels: try: master_address = self.kvdb.conn.connection_pool.connection_kwargs['connection_pool'].get_master_address() kvdb_logger.debug( 'Uses sentinels: `%s %r`, master: `%r`', has_sentinels, config.redis_sentinels, master_address) except MasterNotFoundError, e: self.logger.warn(format_exc(e)) kvdb_logger.warn(format_exc(e)) else: kvdb_logger.debug( 'Uses sentinels: `%s`, conn:`%r`', has_sentinels, self.kvdb.conn) sleep(sleep_time)
def init(self): config = {} self.has_sentinel = has_redis_sentinels(self.config) if self.has_sentinel: sentinels = self._parse_sentinels( self.config.get('redis_sentinels')) if not sentinels: raise ValueError('kvdb.redis_sentinels must be provided') sentinel_master = self.config.get('redis_sentinels_master', None) if not sentinel_master: raise ValueError( 'kvdb.redis_sentinels_master must be provided') config['sentinels'] = sentinels config['sentinel_master'] = sentinel_master else: if self.config.get('host'): config['host'] = self.config.host if self.config.get('port'): config['port'] = int(self.config.port) if self.config.get('unix_socket_path'): config['unix_socket_path'] = self.config.unix_socket_path if self.config.get('db'): config['db'] = int(self.config.db) if self.config.get('password'): # Heuristics - gA is a prefix of encrypted secrets so there is a chance # we need to decrypt it. If the decryption fails, this is fine, we need # assume in such a case that it was an actual password starting with this prefix. if self.config.password.startswith('gA'): try: config['password'] = self.decrypt_func( self.config.password) except InvalidToken: config['password'] = self.config.password else: config['password'] = self.config.password if self.config.get('socket_timeout'): config['socket_timeout'] = float(self.config.socket_timeout) if self.config.get('connection_pool'): split = self.config.connection_pool.split('.') module, class_name = split[:-1], split[-1] mod = import_module(module) config['connection_pool'] = getattr(mod, class_name) if self.config.get('charset'): config['charset'] = self.config.charset if self.config.get('errors'): config['errors'] = self.config.errors self.conn_class = self._get_connection_class() if self.has_sentinel: instance = self.conn_class(config['sentinels'], config.get('password'), config.get('socket_timeout'), charset='utf-8', decode_responses=True) self.conn = instance.master_for(config['sentinel_master']) else: self.conn = self.conn_class(charset='utf-8', decode_responses=True, **config) self.lua_container.kvdb = self.conn