commit a59d7c92209d7306d4f41af1ce3dc0b2f5fd88c2 [browse]
Author: Matt Joiner
Date: 2026-03-28 16:45:46 +11:00

Fix Windows CI failures due to Hyper-V port exclusion zones

On Windows with Hyper-V, large contiguous blocks of the dynamic port range
(49152-65535) are excluded for UDP by WinNAT/HNS. When TCP binds to port P
in this range, the subsequent UDP bind fails with WSAEACCES. With only 10
retries, the OS sequential port assignment cursor stays within the exclusion
zone (observed: 51838, 51848, ... all failing).

Fix by setting the dynamic port range to 20000-36383 in CI before tests run,
avoiding the Hyper-V exclusion zone. Also raise listenAllRetryLimit from 10
to 150 for resilience on non-CI Windows machines.

commit 3fff0ed9c1b92e04c8adf133db4e0685b01d59df [browse]
Author: Matt Joiner
Date: 2026-03-28 11:51:57 +11:00

webseed: handle per-file unavailability (404/403/410/451) without conviction

When a webseed returns 404 (or 403, 410, 451) for a specific file, remove
only that file's pieces from the webseed's bitmap and decrement their
availability, rather than convicting the whole peer for a minute. This
allows the scheduler to immediately reassign those pieces to another
webseed that has the file.

The unavailable-file path returns nil so sliceProcessor skips the random
0-10s error sleep.

Also wire up the webseed scheduler to fire promptly when pieces become
wanted (e.g. on DownloadAll): updatePeerRequestsForPiece now iterates
t.webSeeds and calls onNeedUpdateRequests, which triggers
updateWebseedRequestsWithReason via the coalescing timer when the host
is below the low-water mark. All calls go through the timer so rapid
bursts coalesce into a single scheduler run.

Consolidate the zero/low-water threshold into Client.webseedHostLowOnRequests
and use it in both sliceProcessor and onNeedUpdateRequests.

Add TestDownloadFromTwoNonOverlappingWebseeds: two httptest servers each
serving one file of a multi-file torrent, verifying the client assembles
the complete download from both webseeds simultaneously.

commit e0ddbe9099538ed87786eb66d9a8eeba364ba6ba [browse]
Author: Matt Joiner
Date: 2026-03-27 14:18:05 +11:00

Add webseed test

commit ef45b0200cc42a3f0ee554ce3a9bc6722ab52cdc [browse]
Author: Matt Joiner
Date: 2026-03-27 12:58:03 +11:00

Convert remaining bitmaps to typed v2 wrapper

commit f533f67ae0a1971688506437a8ff848f125011ad [browse]
Author: DhruvilK7
Date: 2026-03-10 03:21:56 +05:30

migration to roaring v2 and used GetCardinalityInRange API

clone the repository to get more history