发布

  • fix: address remaining file descriptor leaks (#1849)

    frostbyte_neo 发布于 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:

    1. DatabaseAccessMixin.get_db_session(): Mark as deprecated since
      it returns a closed session (context manager exits before return).
      Now raises DeprecationWarning to prevent usage.

    2. 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
    3. DownloadService/LibraryRAGService: Add close() methods and
      context manager support (enter/exit) to properly release
      resources (downloaders, embedding models, FAISS indices).

    4. 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

    下载附件