mirror of
https://github.com/open-webui/open-webui.git
synced 2026-08-27 16:04:50 -06:00
fix: honor REDIS_SOCKET_CONNECT_TIMEOUT on non-sentinel clients (#23572)
* fix(redis): honor REDIS_SOCKET_CONNECT_TIMEOUT on non-sentinel clients Previously only the sentinel path passed REDIS_SOCKET_CONNECT_TIMEOUT through to the Redis client. Plain redis:// and cluster URLs fell back to redis-py's default (no explicit connect timeout), so a hung Redis or a black-holed network path could stall the whole worker until the kernel gave up. Forwarding the same env var to from_url()/RedisCluster keeps the behavior consistent across all deployment topologies. * fix(redis): gate socket_connect_timeout on is-not-None, not truthiness Addresses review feedback: the truthiness check on REDIS_SOCKET_CONNECT_TIMEOUT silently dropped an explicit 0 value and was inconsistent with the sentinel construction path, which forwards the value directly. Switch to `is not None` so any user-configured value (including 0) is passed through to from_url() and RedisCluster.from_url(). --------- Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -191,6 +191,12 @@ def get_redis_connection(
|
||||
|
||||
connection = None
|
||||
|
||||
connect_timeout_kwargs = (
|
||||
{'socket_connect_timeout': REDIS_SOCKET_CONNECT_TIMEOUT}
|
||||
if REDIS_SOCKET_CONNECT_TIMEOUT is not None
|
||||
else {}
|
||||
)
|
||||
|
||||
if async_mode:
|
||||
import redis.asyncio as redis
|
||||
|
||||
@@ -214,9 +220,17 @@ def get_redis_connection(
|
||||
elif redis_cluster:
|
||||
if not redis_url:
|
||||
raise ValueError('Redis URL must be provided for cluster mode.')
|
||||
return redis.cluster.RedisCluster.from_url(redis_url, decode_responses=decode_responses)
|
||||
return redis.cluster.RedisCluster.from_url(
|
||||
redis_url,
|
||||
decode_responses=decode_responses,
|
||||
**connect_timeout_kwargs,
|
||||
)
|
||||
elif redis_url:
|
||||
connection = redis.from_url(redis_url, decode_responses=decode_responses)
|
||||
connection = redis.from_url(
|
||||
redis_url,
|
||||
decode_responses=decode_responses,
|
||||
**connect_timeout_kwargs,
|
||||
)
|
||||
else:
|
||||
import redis
|
||||
|
||||
@@ -239,9 +253,17 @@ def get_redis_connection(
|
||||
elif redis_cluster:
|
||||
if not redis_url:
|
||||
raise ValueError('Redis URL must be provided for cluster mode.')
|
||||
return redis.cluster.RedisCluster.from_url(redis_url, decode_responses=decode_responses)
|
||||
return redis.cluster.RedisCluster.from_url(
|
||||
redis_url,
|
||||
decode_responses=decode_responses,
|
||||
**connect_timeout_kwargs,
|
||||
)
|
||||
elif redis_url:
|
||||
connection = redis.Redis.from_url(redis_url, decode_responses=decode_responses)
|
||||
connection = redis.Redis.from_url(
|
||||
redis_url,
|
||||
decode_responses=decode_responses,
|
||||
**connect_timeout_kwargs,
|
||||
)
|
||||
|
||||
_CONNECTION_CACHE[cache_key] = connection
|
||||
return connection
|
||||
|
||||
Reference in New Issue
Block a user