Skip to content

fix(relays): abort stalled connections and remove an unreachable default relay - #16

Open
flox1an wants to merge 3 commits into
ContextVM:masterfrom
flox1an:upstream/relay-resilience
Open

flox1an wants to merge 3 commits into
ContextVM:masterfrom
flox1an:upstream/relay-resilience

Conversation

@flox1an

@flox1an flox1an commented Oct 12, 2026 •

Copy link
Copy Markdown

Why

A relay stuck in CONNECTING keeps looking available, making new lookups repeatedly wait for its EOSE timeout. The default relay.nostr.band is also unreachable.

Change

Remove that default and abort connections after 5 seconds. Report one unclean close so the pool skips the relay during backoff. In-flight request retries remain unchanged.

Verification

  • Lint/build pass; full suite: 211 pass, 5 skip, 0 fail.
  • Real local healthy/stalled relays: timeout observed; subsequent default-policy requests return the healthy event immediately.
  • Regression now observes the connection close rather than waiting through unrelated request retries.

Bun 1.3.14/macOS; temporary test SERVER_SECRET_KEY. Existing manager and duplicate-DuckDB type errors remain. Independent PR; overlapping helper additions with validation scheduling need an additive merge.

Related: #15, #17, #18, #19. All branches are independent; combined suite: 221 pass, 5 skip, 0 fail.

Florian added 3 commits October 12, 2026 09:29
A relay whose host silently drops packets never emits a close event, so
applesauce keeps treating it as ready and every request waits for the
10s EOSE timeout. Aborting the connection attempt after 5s marks the
relay offline so the pool skips it until its reconnect backoff expires.

Bun 1.3.3, which the Docker image uses, does not emit a close event for
a socket closed while connecting either, so the wrapper reports the
aborted attempt itself and lets exactly one close reach the consumer.
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