Skip to content

Commit a70cc6b

Browse files
committed
fix(backend): address database connection issues and pool exhaustion (#5496)
1 parent 19633cd commit a70cc6b

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

keep/api/core/db.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
case,
2929
cast,
3030
desc,
31+
event as sqlalchemy_event,
3132
func,
3233
literal,
3334
null,
@@ -92,6 +93,22 @@
9293

9394

9495
engine = create_db_engine()
96+
97+
98+
@sqlalchemy_event.listens_for(engine, "connect")
99+
def set_sqlite_pragma(dbapi_connection, connection_record):
100+
if engine.dialect.name == "sqlite":
101+
cursor = dbapi_connection.cursor()
102+
cursor.execute("PRAGMA journal_mode=WAL")
103+
cursor.execute("PRAGMA synchronous=NORMAL")
104+
cursor.close()
105+
106+
107+
@sqlalchemy_event.listens_for(engine, "checkout")
108+
def checkout_listener(dbapi_connection, connection_record, connection_proxy):
109+
# This prevents 'Idle in transaction' which often leads to pool exhaustion
110+
dbapi_connection.rollback()
111+
95112
SQLAlchemyInstrumentor().instrument(enable_commenter=True, engine=engine)
96113

97114

@@ -2710,6 +2727,7 @@ def create_deduplication_event(
27102727
)
27112728
session.add(deduplication_event)
27122729
session.commit()
2730+
session.refresh(deduplication_event)
27132731
logger.debug(
27142732
"Deduplication event added",
27152733
extra={

0 commit comments

Comments
 (0)