From d724aeaf2b8027d5c46f7152c593e4e240c80464 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 4 Jun 2025 10:39:56 +1000 Subject: [PATCH] Add webseed error counter and reduce error log level --- client.go | 1 + webseed-peer.go | 9 +++++---- webseed-request.go | 14 +++++++++++++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/client.go b/client.go index dbe0b31e..74d5d7e1 100644 --- a/client.go +++ b/client.go @@ -274,6 +274,7 @@ func (cl *Client) init(cfg *ClientConfig) { } } cl.defaultLocalLtepProtocolMap = makeBuiltinLtepProtocols(!cfg.DisablePEX) + g.MakeMap(&cl.numWebSeedRequests) } // Creates a new Client. Takes ownership of the ClientConfig. Create another one if you want another diff --git a/webseed-peer.go b/webseed-peer.go index f02845a4..d08f9821 100644 --- a/webseed-peer.go +++ b/webseed-peer.go @@ -97,7 +97,7 @@ func (ws *webseedPeer) writeInterested(interested bool) bool { func (ws *webseedPeer) handleCancel(r RequestIndex) { for wr := range ws.activeRequestsForIndex(r) { - wr.request.Cancel() + wr.Cancel() } } @@ -152,13 +152,14 @@ func (ws *webseedPeer) runRequest(webseedRequest *webseedRequest) { locker := ws.locker err := ws.readChunks(webseedRequest) // Ensure the body reader and response are closed. - webseedRequest.request.Cancel() + webseedRequest.Close() if err != nil { - level := slog.LevelWarn - if errors.Is(err, context.Canceled) { + level := slog.LevelInfo + if webseedRequest.cancelled { level = slog.LevelDebug } ws.slogger().Log(context.TODO(), level, "webseed request error", "err", err) + torrent.Add("webseed request error count", 1) // This used to occur only on webseed.ErrTooFast but I think it makes sense to slow down any // kind of error. Pausing here will starve the available requester slots which slows things // down. diff --git a/webseed-request.go b/webseed-request.go index 0f8440db..7e601d6b 100644 --- a/webseed-request.go +++ b/webseed-request.go @@ -6,11 +6,23 @@ import ( // A wrapper around webseed.Request with extra state for webseedPeer. type webseedRequest struct { + // Fingers out. request webseed.Request // First assigned in the range. begin RequestIndex // The next to be read. next RequestIndex // One greater than the end of the range. - end RequestIndex + end RequestIndex + cancelled bool +} + +func (me *webseedRequest) Close() { + me.request.Cancel() +} + +// Record that it was exceptionally cancelled. +func (me *webseedRequest) Cancel() { + me.cancelled = true + me.request.Cancel() } -- 2.51.0