summaryrefslogtreecommitdiff
path: root/searx/shared/redisdb.py
diff options
context:
space:
mode:
authorAlexandre FLAMENT <alexandre.flament@hesge.ch>2022-11-07 21:20:48 +0000
committerAlexandre FLAMENT <alexandre.flament@hesge.ch>2022-11-07 22:08:32 +0000
commit73b5a58d9efb76f6c9d3d821a472783ba126d5d7 (patch)
treeb268cbc2161a013abe2674f3662f4312529e95c1 /searx/shared/redisdb.py
parent8f19bdaf17047c2304da739c358d3daee21384c1 (diff)
[FIX] Redis initialization
redis.Redis.from_url(url) doesn't check if the url is valid Before this commit: actual error are detected later when the client is actually used. With this commit, client() makes sure to return a valid Redis client or None. Also, the code makes sure not to log the password of the Redis URL
Diffstat (limited to 'searx/shared/redisdb.py')
-rw-r--r--searx/shared/redisdb.py28
1 files changed, 21 insertions, 7 deletions
diff --git a/searx/shared/redisdb.py b/searx/shared/redisdb.py
index 6cc4e46d1..ba4a76baa 100644
--- a/searx/shared/redisdb.py
+++ b/searx/shared/redisdb.py
@@ -40,17 +40,31 @@ def client() -> redis.Redis:
def initialize():
global _CLIENT # pylint: disable=global-statement
redis_url = get_setting('redis.url')
+ if not redis_url:
+ return False
try:
- if redis_url:
- _CLIENT = redis.Redis.from_url(redis_url)
- logger.info("connected redis: %s", redis_url)
- return True
- except redis.exceptions.ConnectionError:
+ # create a client, but no connection is done
+ _CLIENT = redis.Redis.from_url(redis_url)
+
+ # log the parameters as seen by the redis lib, without the password
+ kwargs = _CLIENT.get_connection_kwargs()
+ kwargs.pop('password', None)
+ kwargs = ' '.join([f'{k}={v!r}' for k, v in kwargs.items()])
+ logger.info("connecting to Redis %s", kwargs)
+
+ # check the connection
+ _CLIENT.ping()
+
+ # no error: the redis connection is working
+ logger.info("connected to Redis")
+ return True
+ except redis.exceptions.RedisError as e:
+ _CLIENT = None
_pw = pwd.getpwuid(os.getuid())
logger.exception("[%s (%s)] can't connect redis DB ...", _pw.pw_name, _pw.pw_uid)
- if redis_url == OLD_REDIS_URL_DEFAULT_URL:
+ if redis_url == OLD_REDIS_URL_DEFAULT_URL and isinstance(e, redis.exceptions.ConnectionError):
logger.info(
- "You can safely ignore the above Redis error if you don't use Redis."
+ "You can safely ignore the above Redis error if you don't use Redis. "
"You can remove this error by setting redis.url to false in your settings.yml."
)
return False