Skip to content

Conversation

@m7kvqbe1
Copy link
Owner

@m7kvqbe1 m7kvqbe1 commented Oct 2, 2025

m7kvqbe1 and others added 7 commits June 6, 2025 12:46
This feature addresses the issue of uploads hanging indefinitely in
unreliable network conditions, particularly in Node.js environments
where no default timeout exists.

When uploads stall due to network issues, TCP connections can enter a
degraded state where no data is transferred but no error is triggered.
This implementation detects such stalls and forces a retry.

Implementation details:
- Progress-based: Detects when no upload progress events are fired
- Gracefully integrates with the existing retry mechanism
- Fully configurable with sensible defaults:
  - 30s stall timeout (time with no progress before considering stalled)
  - 5s check interval (how often to check for stalls)

This is especially important for uploads over satellite links, cellular
networks, or other unreliable connections where TCP backoff can cause
indefinite stalls.
Also refactors the test-stall-detection test suite.
@m7kvqbe1 m7kvqbe1 self-assigned this Oct 2, 2025
@m7kvqbe1 m7kvqbe1 force-pushed the feat/complete-stall-detection branch 3 times, most recently from 2de72d8 to 2200fab Compare October 2, 2025 13:06
@m7kvqbe1 m7kvqbe1 marked this pull request as ready for review October 2, 2025 13:06
@m7kvqbe1 m7kvqbe1 force-pushed the feat/complete-stall-detection branch from 2200fab to 44b87ab Compare October 2, 2025 13:18
@m7kvqbe1 m7kvqbe1 force-pushed the feat/complete-stall-detection branch from 44b87ab to 6913195 Compare October 2, 2025 14:05
We can't get low level TCP socket transfer progress from the Node HTTP
module, you can only see an internal I/O buffer being filled, you then
get silence until that buffer is completely drained (transmitted) and
starts to be filled again, this means you consistently get false
positives for stall detection.
@m7kvqbe1 m7kvqbe1 force-pushed the feat/complete-stall-detection branch from bebdf0a to 4cd5c53 Compare October 6, 2025 11:26
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.

3 participants