rust.sqlx.missing_pool_timeout
Stability
Medium
Detects SQLx pool configuration without connection timeout.
Why It Matters
Section titled “Why It Matters”Without pool timeouts:
- Hanging requests — Waiting for connections that never come
- Connection starvation — Pool exhaustion blocks all queries
- Cascade failures — Database issues spread to your service
- No feedback — Can’t tell why things are slow
Pool timeouts provide fail-fast behavior and observability.
Example
Section titled “Example”// ❌ Beforelet pool = PgPoolOptions::new() .max_connections(5) .connect("postgres://...") .await?;// ✅ Afteruse std::time::Duration;
let pool = PgPoolOptions::new() .max_connections(5) .acquire_timeout(Duration::from_secs(3)) .connect("postgres://...") .await?;What Unfault Detects
Section titled “What Unfault Detects”- PgPoolOptions without
acquire_timeout - Missing connection timeout
- Pool without max connections set
Auto-Fix
Section titled “Auto-Fix”Unfault adds acquire_timeout(Duration::from_secs(3)) to pool options.
Complete Pool Configuration
Section titled “Complete Pool Configuration”use sqlx::postgres::PgPoolOptions;use std::time::Duration;
let pool = PgPoolOptions::new() // Connection limits .max_connections(10) .min_connections(2)
// Timeouts .acquire_timeout(Duration::from_secs(3)) .idle_timeout(Duration::from_secs(600)) .max_lifetime(Duration::from_secs(1800))
// Connection testing .test_before_acquire(true)
.connect(&database_url) .await?;Timeout Guidelines
Section titled “Timeout Guidelines”| Setting | Purpose | Suggested Value |
|---|---|---|
acquire_timeout | Wait for connection from pool | 3-5 seconds |
idle_timeout | Close unused connections | 10 minutes |
max_lifetime | Recycle connections | 30 minutes |