tracker/tracker.go | 5 ++++- tracker_scraper.go | 14 ++++++++------ diff --git a/tracker/tracker.go b/tracker/tracker.go index 65cad803c25caf39355bc5e5d3cb4e13b6832987..7f2a5b5024888550dbd1e78fed746a38cb2388fc 100644 --- a/tracker/tracker.go +++ b/tracker/tracker.go @@ -66,6 +66,9 @@ ClientIp6 krpc.NodeAddr Context context.Context } +// The code *is* the documentation. +const DefaultTrackerAnnounceTimeout = 15 * time.Second + func (me Announce) Do() (res AnnounceResponse, err error) { _url, err := url.Parse(me.TrackerUrl) if err != nil { @@ -75,7 +78,7 @@ if me.Context == nil { // This is just to maintain the old behaviour that should be a timeout of 15s. Users can // override it by providing their own Context. See comments elsewhere about longer timeouts // acting as rate limiting overloaded trackers. - ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), DefaultTrackerAnnounceTimeout) defer cancel() me.Context = ctx } diff --git a/tracker_scraper.go b/tracker_scraper.go index c18f21f858434d36b04e5bc0f05a5360074b34d6..21c4111be1d9813e074b56db3da612feb0ca1938 100644 --- a/tracker_scraper.go +++ b/tracker_scraper.go @@ -136,13 +136,15 @@ } me.t.cl.rLock() req := me.t.announceRequest(event) me.t.cl.rUnlock() - // The default timeout is currently 15s, and that works well as backpressure on concurrent - // access to the tracker. - //ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second) - //defer cancel() + // The default timeout works well as backpressure on concurrent access to the tracker. Since + // we're passing our own Context now, we will include that timeout ourselves to maintain similar + // behavior to previously, albeit with this context now being cancelled when the Torrent is + // closed. + ctx, cancel := context.WithTimeout(ctx, tracker.DefaultTrackerAnnounceTimeout) + defer cancel() me.t.logger.WithDefaultLevel(log.Debug).Printf("announcing to %q: %#v", me.u.String(), req) res, err := tracker.Announce{ - //Context: ctx, + Context: ctx, HTTPProxy: me.t.cl.config.HTTPProxy, UserAgent: me.t.cl.config.HTTPUserAgent, TrackerUrl: me.trackerUrl(ip), @@ -243,7 +245,7 @@ } } func (me *trackerScraper) announceStopped() { - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), tracker.DefaultTrackerAnnounceTimeout) defer cancel() me.announce(ctx, tracker.Stopped) }