-
fix: address remaining file descriptor leaks (#1849)
发布于
2026-01-31 13:19:06 +00:00 - fix: address remaining file descriptor leaks
Fix 4 remaining file descriptor leak sources that survive after the
Jan 29-30 fixes:-
DatabaseAccessMixin.get_db_session(): Mark as deprecated since
it returns a closed session (context manager exits before return).
Now raises DeprecationWarning to prevent usage. -
auth/routes.py session leaks: Add try/finally blocks around all
session usage in login() and register() to ensure cleanup:- db_session for settings manager
- auth_db for user lookup/creation
- user_db_session for model cache clearing
-
DownloadService/LibraryRAGService: Add close() methods and
context manager support (enter/exit) to properly release
resources (downloaders, embedding models, FAISS indices). -
Scheduler thread-local cleanup: Add cleanup_current_thread()
calls in finally blocks of scheduler job functions to clean up
thread-local sessions after each job completes:- _process_user_documents()
- _check_subscription()
- _check_user_overdue_subscriptions()
Also update scheduler to use context managers for DownloadService
and LibraryRAGService.Updated tests to expect DeprecationWarning from get_db_session().
- fix: add connection validation and improve session cleanup
-
Add pool_pre_ping=True to QueuePool config for user databases
This validates connections before use, preventing stale connection errors
(matches auth_db.py which already has this setting) -
Improve Flask teardown handler to rollback on exceptions
Uses g.pop() for cleaner session removal and adds explicit rollback
on exception for data integrity
下载附件