fix: apply REDIS_KEY_PREFIX to tool_servers and terminal_servers cache keys (#23649)
These four Redis calls were the only places in the backend still using bare cache keys. Every other call already namespaces through REDIS_KEY_PREFIX, which is how multiple Open WebUI instances sharing a Redis database stay isolated. Two instances with different TOOL_SERVER_CONNECTIONS or TERMINAL_SERVER_CONNECTIONS would otherwise clobber each other's cached OpenAPI specs.
This commit is contained in:
@@ -51,6 +51,7 @@ from open_webui.env import (
|
|||||||
ENABLE_FORWARD_USER_INFO_HEADERS,
|
ENABLE_FORWARD_USER_INFO_HEADERS,
|
||||||
FORWARD_SESSION_INFO_HEADER_CHAT_ID,
|
FORWARD_SESSION_INFO_HEADER_CHAT_ID,
|
||||||
FORWARD_SESSION_INFO_HEADER_MESSAGE_ID,
|
FORWARD_SESSION_INFO_HEADER_MESSAGE_ID,
|
||||||
|
REDIS_KEY_PREFIX,
|
||||||
)
|
)
|
||||||
from open_webui.utils.headers import include_user_info_headers
|
from open_webui.utils.headers import include_user_info_headers
|
||||||
from open_webui.tools.builtin import (
|
from open_webui.tools.builtin import (
|
||||||
@@ -853,7 +854,9 @@ async def set_tool_servers(request: Request):
|
|||||||
request.app.state.TOOL_SERVERS = await get_tool_servers_data(request.app.state.config.TOOL_SERVER_CONNECTIONS)
|
request.app.state.TOOL_SERVERS = await get_tool_servers_data(request.app.state.config.TOOL_SERVER_CONNECTIONS)
|
||||||
|
|
||||||
if request.app.state.redis is not None:
|
if request.app.state.redis is not None:
|
||||||
await request.app.state.redis.set('tool_servers', json.dumps(request.app.state.TOOL_SERVERS))
|
await request.app.state.redis.set(
|
||||||
|
f'{REDIS_KEY_PREFIX}:tool_servers', json.dumps(request.app.state.TOOL_SERVERS)
|
||||||
|
)
|
||||||
|
|
||||||
return request.app.state.TOOL_SERVERS
|
return request.app.state.TOOL_SERVERS
|
||||||
|
|
||||||
@@ -862,7 +865,7 @@ async def get_tool_servers(request: Request):
|
|||||||
tool_servers = []
|
tool_servers = []
|
||||||
if request.app.state.redis is not None:
|
if request.app.state.redis is not None:
|
||||||
try:
|
try:
|
||||||
tool_servers = json.loads(await request.app.state.redis.get('tool_servers'))
|
tool_servers = json.loads(await request.app.state.redis.get(f'{REDIS_KEY_PREFIX}:tool_servers'))
|
||||||
request.app.state.TOOL_SERVERS = tool_servers
|
request.app.state.TOOL_SERVERS = tool_servers
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(f'Error fetching tool_servers from Redis: {e}')
|
log.error(f'Error fetching tool_servers from Redis: {e}')
|
||||||
@@ -988,7 +991,9 @@ async def set_terminal_servers(request: Request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if request.app.state.redis is not None:
|
if request.app.state.redis is not None:
|
||||||
await request.app.state.redis.set('terminal_servers', json.dumps(request.app.state.TERMINAL_SERVERS))
|
await request.app.state.redis.set(
|
||||||
|
f'{REDIS_KEY_PREFIX}:terminal_servers', json.dumps(request.app.state.TERMINAL_SERVERS)
|
||||||
|
)
|
||||||
|
|
||||||
return request.app.state.TERMINAL_SERVERS
|
return request.app.state.TERMINAL_SERVERS
|
||||||
|
|
||||||
@@ -998,7 +1003,9 @@ async def get_terminal_servers(request: Request):
|
|||||||
terminal_servers = []
|
terminal_servers = []
|
||||||
if request.app.state.redis is not None:
|
if request.app.state.redis is not None:
|
||||||
try:
|
try:
|
||||||
terminal_servers = json.loads(await request.app.state.redis.get('terminal_servers'))
|
terminal_servers = json.loads(
|
||||||
|
await request.app.state.redis.get(f'{REDIS_KEY_PREFIX}:terminal_servers')
|
||||||
|
)
|
||||||
request.app.state.TERMINAL_SERVERS = terminal_servers
|
request.app.state.TERMINAL_SERVERS = terminal_servers
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.error(f'Error fetching terminal_servers from Redis: {e}')
|
log.error(f'Error fetching terminal_servers from Redis: {e}')
|
||||||
|
|||||||
Reference in New Issue
Block a user