Skip to content

feat: add singleflight-based download deduplication for concurrent requests#23

Merged
wolfeidau merged 3 commits into
mainfrom
feat_add_single_flight
Feb 7, 2026
Merged

feat: add singleflight-based download deduplication for concurrent requests#23
wolfeidau merged 3 commits into
mainfrom
feat_add_single_flight

Conversation

@wolfeidau
Copy link
Copy Markdown
Member

  • feat: add singleflight-based download deduplication for concurrent requests
  • fix: correct singleflight Forget behavior and extract shared download helpers

…quests

- Add download package with Downloader type wrapping golang.org/x/sync/singleflight
- Uses DoChan with detached context so caller timeouts don't cancel in-flight downloads
- Integrate into all protocol handlers (goproxy, npm, oci, pypi, maven, rubygems)
- Wire shared Downloader instance through server configuration
- Refactor goproxy handleZip to download-then-serve, eliminating double-fetch
… helpers

- Only call Forget when the download itself failed, not when the caller's
  context timed out, preventing cancellation of in-flight downloads for
  other waiters
- Fix goproxy fetchAndStoreZip returning zero size by using temp file
  pattern to track bytes written
- Fix OCI handler using == instead of errors.Is for ErrNotFound
- Remove unused logger field and WithLogger option from Downloader
- Extract HandleResult, ServeFromStore, and ForgetOnDownloadError helpers
  into download/serve.go, reducing ~35 lines per handler to ~12
- Add tests for ForgetOnDownloadError context-aware behavior
…nternal helpers

- Replace 11-parameter HandleResult with HandleResultParams struct for
  self-documenting call sites
- Unexport forgetOnDownloadError and handleDownloadError since they are
  only used within HandleResult
- Remove IsNotFoundFunc type alias in favor of inline func(error) bool
- Add default 404 handler when NotFoundHandler is nil (5 of 6 callers
  used the same pattern)
@wolfeidau wolfeidau merged commit 4dcfc62 into main Feb 7, 2026
1 check passed
@wolfeidau wolfeidau deleted the feat_add_single_flight branch February 7, 2026 13:25
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