From 56c3a5ff5bee8faf9ac104c15f2c4bb972668c92 Mon Sep 17 00:00:00 2001 From: rkuo-danswer Date: Sun, 3 Nov 2024 13:58:12 -0800 Subject: [PATCH] add POSTGRES_IDLE_SESSIONS_TIMEOUT (#3019) Co-authored-by: Richard Kuo --- backend/danswer/configs/app_configs.py | 11 +++++++++++ backend/danswer/db/engine.py | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/backend/danswer/configs/app_configs.py b/backend/danswer/configs/app_configs.py index b76ad6042d12..3e2695072a22 100644 --- a/backend/danswer/configs/app_configs.py +++ b/backend/danswer/configs/app_configs.py @@ -163,6 +163,17 @@ try: except ValueError: POSTGRES_POOL_RECYCLE = POSTGRES_POOL_RECYCLE_DEFAULT +# Experimental setting to control idle transactions +POSTGRES_IDLE_SESSIONS_TIMEOUT_DEFAULT = 0 # milliseconds +try: + POSTGRES_IDLE_SESSIONS_TIMEOUT = int( + os.environ.get( + "POSTGRES_IDLE_SESSIONS_TIMEOUT", POSTGRES_IDLE_SESSIONS_TIMEOUT_DEFAULT + ) + ) +except ValueError: + POSTGRES_IDLE_SESSIONS_TIMEOUT = POSTGRES_IDLE_SESSIONS_TIMEOUT_DEFAULT + REDIS_SSL = os.getenv("REDIS_SSL", "").lower() == "true" REDIS_HOST = os.environ.get("REDIS_HOST") or "localhost" REDIS_PORT = int(os.environ.get("REDIS_PORT", 6379)) diff --git a/backend/danswer/db/engine.py b/backend/danswer/db/engine.py index 9dc6024ab8cb..6b45f3909402 100644 --- a/backend/danswer/db/engine.py +++ b/backend/danswer/db/engine.py @@ -29,6 +29,7 @@ from danswer.configs.app_configs import POSTGRES_API_SERVER_POOL_OVERFLOW from danswer.configs.app_configs import POSTGRES_API_SERVER_POOL_SIZE from danswer.configs.app_configs import POSTGRES_DB from danswer.configs.app_configs import POSTGRES_HOST +from danswer.configs.app_configs import POSTGRES_IDLE_SESSIONS_TIMEOUT from danswer.configs.app_configs import POSTGRES_PASSWORD from danswer.configs.app_configs import POSTGRES_POOL_PRE_PING from danswer.configs.app_configs import POSTGRES_POOL_RECYCLE @@ -352,6 +353,10 @@ def get_session_with_tenant( cursor = dbapi_connection.cursor() try: cursor.execute(f'SET search_path = "{tenant_id}"') + if POSTGRES_IDLE_SESSIONS_TIMEOUT: + cursor.execute( + f"SET SESSION idle_in_transaction_session_timeout = {POSTGRES_IDLE_SESSIONS_TIMEOUT}" + ) finally: cursor.close()