Skip to content

[ebot] Consolidate database connection pooling#251

Merged
ewlarson merged 3 commits into
developfrom
feature/db-connection-pooling
May 22, 2026
Merged

[ebot] Consolidate database connection pooling#251
ewlarson merged 3 commits into
developfrom
feature/db-connection-pooling

Conversation

@ewlarson
Copy link
Copy Markdown
Contributor

Summary

Consolidates SQLAlchemy engine and session creation behind shared app-level helpers so request-path code does not create independent PostgreSQL pools per module/service.

Why

AppSignal reported asyncpg.exceptions.TooManyConnectionsError before production launch. The root issue was broader than one endpoint: multiple request paths could construct their own engines/sessionmakers, multiplying pool counts across API workers.

What changed

  • Added shared async/sync engine factories and db.session.
    • Rewired request-path modules and services to use shared engines/sessions.
    • Disposes shared engines during FastAPI lifespan shutdown.
    • Shortens DB connection hold time in resource detail/list and search rendering.
    • Skips expensive similar-item enrichment on resource list responses.
    • Preserves licensed-access response behavior from develop using short-lived sessions where needed.
    • Documents the connection-pool policy and perf-test expectations.

Validation

  • uv run ruff check on touched API/resource/search/utils files: passed.
    • python -m compileall on conflict-touched files: passed.
    • Focused pytest after rebase: 12 passed for resource detail/list/search, JSON:API licensed access serialization, licensed access repository, and similar items.
    • Reran resource list unit test with endpoint cache disabled: 1 passed. The combined run first hit a stale Redis endpoint-cache fixture record against a dummy request object, not application code.
    • Earlier branch validation: API-only make k6-smoke passed; API-only make k6-stress passed with 0 failures and no TooManyConnections, SQLAlchemy pool timeout, asyncpg, or HTTP 500 log matches.

@ewlarson ewlarson merged commit f44afd6 into develop May 22, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant