Skip to content

pgconn: use fresh context for fallback connection in connectPreferred#2554

Merged
jackc merged 1 commit into
jackc:masterfrom
c-tonneslan:fix/connectpreferred-fallback-ctx
May 16, 2026
Merged

pgconn: use fresh context for fallback connection in connectPreferred#2554
jackc merged 1 commit into
jackc:masterfrom
c-tonneslan:fix/connectpreferred-fallback-ctx

Conversation

@c-tonneslan
Copy link
Copy Markdown
Contributor

When ConnectTimeout is set, connectPreferred creates a per-host timeout context (derived from octx) for each host in the loop. After the loop finishes, ctx holds whatever context was used for the last host, which may have already expired by the time we get to the fallback.

The fallback path (for prefer-standby / prefer-primary) was passing that stale ctx to connectOne, so it would immediately get a deadline exceeded error even though the caller's original context still had time left.

The fix creates a fresh ConnectTimeout-bounded context from octx for the fallback, same pattern as the loop uses for each host.

Fixes #2172

When ConnectTimeout is set, connectPreferred creates a per-host timeout
context derived from octx for each host. After the loop, ctx holds
whatever context was used for the last attempt, which may have already
expired. The fallback connection (for prefer-standby/prefer-primary) was
using that stale ctx, so it would fail immediately with a deadline
exceeded error even though the original context still had time left.

Fix this by creating a fresh timeout context from octx for the fallback,
same as we do for each host in the loop.

Fixes jackc#2172
@jackc jackc merged commit 6e0ed9f into jackc:master May 16, 2026
5 of 14 checks passed
@jackc
Copy link
Copy Markdown
Owner

jackc commented May 16, 2026

LGTM

c-tonneslan added a commit to c-tonneslan/portfolio that referenced this pull request May 16, 2026
Add an optional status="merged" field on PR entries and render a small
green "merged" badge next to the title in ContribCard. Mark the three
PRs that have actually been merged so far (jackc/pgx#2554,
nats-io/nats.go#2076, urfave/cli#2328).

Drop the two closed-without-merge PRs that were still listed
(go-chi/chi#1093, tailscale/tailscale#19689). Closed PRs aren't
something I want to show off, so the data file just never carries
them, no need for a "closed" status.

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
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.

Connection timeout wrongly applied to non-preferred hosts

2 participants