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 {
// 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
}
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),
}
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)
}