From: Matt Joiner Date: Tue, 5 Aug 2025 10:02:18 +0000 (+1000) Subject: Extract webseed end request calculation and avoid bug for now X-Git-Tag: v1.59.0~2^2~58 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b7a953d8652f9ab172b94a47bf30a7b6ab66e308;p=btrtrc.git Extract webseed end request calculation and avoid bug for now --- diff --git a/webseed-requesting.go b/webseed-requesting.go index 37567270..d41d909c 100644 --- a/webseed-requesting.go +++ b/webseed-requesting.go @@ -187,43 +187,52 @@ func (cl *Client) updateWebseedRequests() { peer := t.webSeeds[requestKey.url] panicif.NotEq(peer.hostKey, costKey) printPlan() - begin := requestKey.startRequest - chunkEnd := t.endRequestForAlignedWebseedResponse(requestKey.startRequest) - last := begin - for { - if !t.wantReceiveChunk(last) { - break - } - if last >= chunkEnd-1 { - break - } - last++ - } + debugLogger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ Level: slog.LevelDebug, AddSource: true, })).With( "webseedUrl", requestKey.url, "webseedChunkIndex", requestKey.sliceIndex) - // Request shouldn't exist if this occurs. - panicif.LessThan(last, begin) - // Hello darkness (C++) my old friend... - end := last + 1 - end = min(end, t.endRequestForAlignedWebseedResponse(begin)) + + begin := requestKey.startRequest + end := t.getWebseedRequestEnd(begin, debugLogger) panicif.LessThanOrEqual(end, begin) - if webseed.PrintDebug && end != chunkEnd { - debugLogger.Debug( - "shortened webseed request", - "request key", requestKey, - "from", endExclusiveString(begin, chunkEnd), - "to", endExclusiveString(begin, end)) - } - panicif.GreaterThan(end, chunkEnd) + peer.spawnRequest(begin, end, debugLogger) } } } +func (t *Torrent) getWebseedRequestEnd(begin RequestIndex, debugLogger *slog.Logger) RequestIndex { + chunkEnd := t.endRequestForAlignedWebseedResponse(begin) + panicif.False(t.wantReceiveChunk(begin)) + if true { + // Pending fix to pendingPieces matching piece request order due to missing initial pieces + // checks? + return chunkEnd + } + last := begin + for { + if !t.wantReceiveChunk(last) { + break + } + if last >= chunkEnd-1 { + break + } + last++ + } + end := last + 1 + panicif.GreaterThan(end, chunkEnd) + if webseed.PrintDebug && end != chunkEnd { + debugLogger.Debug( + "shortened webseed request", + "from", endExclusiveString(begin, chunkEnd), + "to", endExclusiveString(begin, end)) + } + return end +} + // Cloudflare caches up to 512 MB responses by default. This is also an alignment. var webseedRequestChunkSize uint64 = 256 << 20