From: Matt Joiner Date: Thu, 17 Mar 2022 04:16:04 +0000 (+1100) Subject: Merge branch 'go1.18' X-Git-Tag: v1.42.0~8^2 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=e801f8518f5992585c372a997f647441695089f4;p=btrtrc.git Merge branch 'go1.18' --- e801f8518f5992585c372a997f647441695089f4 diff --cc client.go index 4b6f1a24,ad20ef2b..d5f96c0e --- a/client.go +++ b/client.go @@@ -20,8 -22,10 +22,9 @@@ import "github.com/anacrolix/chansync/events" "github.com/anacrolix/dht/v2" "github.com/anacrolix/dht/v2/krpc" + "github.com/anacrolix/generics" "github.com/anacrolix/log" "github.com/anacrolix/missinggo/perf" - "github.com/anacrolix/missinggo/pubsub" "github.com/anacrolix/missinggo/v2" "github.com/anacrolix/missinggo/v2/bitmap" "github.com/anacrolix/missinggo/v2/pproffd" @@@ -1187,9 -1194,10 +1195,11 @@@ func (cl *Client) newTorrentOpt(opts Ad webSeeds: make(map[string]*Peer), gotMetainfoC: make(chan struct{}), } + t.smartBanCache.Hash = sha1.Sum + t.smartBanCache.Init() t.networkingEnabled.Set() t.logger = cl.logger.WithContextValue(t).WithNames("torrent", t.infoHash.HexString()) + t.sourcesLogger = t.logger.WithNames("sources") if opts.ChunkSize == 0 { opts.ChunkSize = defaultChunkSize } diff --cc go.mod index 4aa49944,06f4b98e..2b67f859 --- a/go.mod +++ b/go.mod @@@ -3,21 -3,22 +3,23 @@@ module github.com/anacrolix/torren go 1.18 require ( + crawshaw.io/sqlite v0.3.3-0.20210127221821-98b1f83c5508 github.com/RoaringBitmap/roaring v0.9.4 + github.com/ajwerner/btree v0.0.0-20211201061316-91c8b66ad617 github.com/alexflint/go-arg v1.4.2 - github.com/anacrolix/args v0.4.1-0.20211104085705-59f0fe94eb8f + github.com/anacrolix/args v0.5.0 github.com/anacrolix/chansync v0.3.0 - github.com/anacrolix/dht/v2 v2.15.2-0.20220123034220-0538803801cb + github.com/anacrolix/dht/v2 v2.16.2-0.20220311024416-dd658f18fd51 github.com/anacrolix/envpprof v1.1.1 github.com/anacrolix/fuse v0.2.0 - github.com/anacrolix/generics v0.0.0-20220121083126-c81e77b56d6d - github.com/anacrolix/go-libutp v1.1.0 ++ github.com/anacrolix/generics v0.0.0-20220217222028-44932cf46edd + github.com/anacrolix/go-libutp v1.2.0 github.com/anacrolix/log v0.13.1 github.com/anacrolix/missinggo v1.3.0 github.com/anacrolix/missinggo/perf v1.0.0 - github.com/anacrolix/missinggo/v2 v2.5.2 + github.com/anacrolix/missinggo/v2 v2.5.4-0.20220317032254-8c5ea4947a0b - github.com/anacrolix/multiless v0.2.0 + github.com/anacrolix/multiless v0.2.1-0.20211218050420-533661eef5dc - github.com/anacrolix/squirrel v0.4.0 + github.com/anacrolix/squirrel v0.4.1-0.20220122230132-14b040773bac github.com/anacrolix/sync v0.4.0 github.com/anacrolix/tagflag v1.3.0 github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 @@@ -37,13 -38,15 +39,13 @@@ github.com/pion/webrtc/v3 v3.1.24-0.20220208053747-94262c1b2b38 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.7.0 + github.com/tidwall/btree v0.7.2-0.20211211132910-4215444137fc go.etcd.io/bbolt v1.3.6 golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac - zombiezen.com/go/sqlite v0.8.0 ) require ( - github.com/alexflint/go-scalar v1.0.0 // indirect - github.com/anacrolix/confluence v1.9.0 // indirect + github.com/alexflint/go-scalar v1.1.0 // indirect - github.com/anacrolix/confluence v1.9.0 // indirect github.com/anacrolix/mmsg v1.0.0 // indirect github.com/anacrolix/stm v0.3.0 // indirect github.com/benbjohnson/immutable v0.3.0 // indirect diff --cc go.sum index a0f9b8cf,63f6c4f6..8e6a3634 --- a/go.sum +++ b/go.sum @@@ -21,20 -20,17 +23,15 @@@ github.com/alecthomas/units v0.0.0-2015 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alexflint/go-arg v1.4.2 h1:lDWZAXxpAnZUq4qwb86p/3rIJJ2Li81EoMbTMujhVa0= github.com/alexflint/go-arg v1.4.2/go.mod h1:9iRbDxne7LcR/GSvEr7ma++GLpdIU1zrghf2y2768kM= - github.com/alexflint/go-scalar v1.0.0 h1:NGupf1XV/Xb04wXskDFzS0KWOLH632W/EO4fAFi+A70= github.com/alexflint/go-scalar v1.0.0/go.mod h1:GpHzbCOZXEKMEcygYQ5n/aa4Aq84zbxjy3MxYW0gjYw= + github.com/alexflint/go-scalar v1.1.0 h1:aaAouLLzI9TChcPXotr6gUhq+Scr8rl0P9P4PnltbhM= + github.com/alexflint/go-scalar v1.1.0/go.mod h1:LoFvNMqS1CPrMVltza4LvnGKhaSpc3oyLEBUZVhhS2o= -github.com/anacrolix/args v0.4.1-0.20211104085705-59f0fe94eb8f h1:NEHQxPja+2pvaFtFMUC4k14X1kwInDtX2DSZUNcxJKQ= -github.com/anacrolix/args v0.4.1-0.20211104085705-59f0fe94eb8f/go.mod h1:41JBnF8sKExNVLHPkCdL74jkZc3dSxAkGsk1TuKOUFI= +github.com/anacrolix/args v0.5.0 h1:bZCkbtn4QMB4ow2g34R/oqTFwrI6IojysKop6+ZcOSs= +github.com/anacrolix/args v0.5.0/go.mod h1:Fj/N2PehEwTBE5t/V/9xgTcxDkuYQ+5IBoFw/8gkldI= github.com/anacrolix/chansync v0.3.0 h1:lRu9tbeuw3wl+PhMu/r+JJCRu5ArFXIluOgdF0ao6/U= github.com/anacrolix/chansync v0.3.0/go.mod h1:DZsatdsdXxD0WiwcGl0nJVwyjCKMDv+knl1q2iBjA2k= --github.com/anacrolix/confluence v1.9.0 h1:7WrWktoDw7P4uo1bzgaA8FFesvc7NsTp37sAsG54XlE= --github.com/anacrolix/confluence v1.9.0/go.mod h1:O5uS+WVgip+3SOcV1K7E/jE3m4DtK7Jk6QJTnU2VS5s= --github.com/anacrolix/dht/v2 v2.15.2-0.20220123034220-0538803801cb h1:c4e9XiiT0P3uMkONTkpzLVGxz3if5fIn6UB4HTrVlc0= --github.com/anacrolix/dht/v2 v2.15.2-0.20220123034220-0538803801cb/go.mod h1:GCylVI6WTvbxvhY7pBoHiE5dmjfDWkhqbobDpjND01A= - github.com/anacrolix/dht/v2 v2.16.1 h1:Q/mL3wP+zZwgo0B3W21JDY3X51KE3xwv3UUjqTf4VJY= - github.com/anacrolix/dht/v2 v2.16.1/go.mod h1:7FOQ1dkRmAMb0LQM8T0hGXc9bQ4RD2/0CB3wcVyBxhk= +github.com/anacrolix/dht/v2 v2.16.2-0.20220311024416-dd658f18fd51 h1:issCwqC43gQ7n0gg9rn0EeVYXnQMI7vlnWub4oidtlU= +github.com/anacrolix/dht/v2 v2.16.2-0.20220311024416-dd658f18fd51/go.mod h1:osiyaNrMLG9dw7wUtVMaII/NdCjlXeHjUcYzXnmop68= github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= github.com/anacrolix/envpprof v1.0.0/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= github.com/anacrolix/envpprof v1.1.0/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4= @@@ -42,11 -38,12 +39,13 @@@ github.com/anacrolix/envpprof v1.1.1 h1 github.com/anacrolix/envpprof v1.1.1/go.mod h1:My7T5oSqVfEn4MD4Meczkw/f5lSIndGAKu/0SM/rkf4= github.com/anacrolix/fuse v0.2.0 h1:pc+To78kI2d/WUjIyrsdqeJQAesuwpGxlI3h1nAv3Do= github.com/anacrolix/fuse v0.2.0/go.mod h1:Kfu02xBwnySDpH3N23BmrP3MDfwAQGRLUCj6XyeOvBQ= -github.com/anacrolix/generics v0.0.0-20220121083126-c81e77b56d6d h1:hKdj31gsNwxan3Lr4S5N1wXQI+0pMnX6/qZt75GSq7U= -github.com/anacrolix/generics v0.0.0-20220121083126-c81e77b56d6d/go.mod h1:SommN0/3j+jrAnjopAZfqkREMGw59ELwloDcx6Y0KLA= -github.com/anacrolix/go-libutp v1.1.0 h1:89XK+0NBTaKgSoG/v5OfDK0yoyrt2HInfg46I1BaT2E= -github.com/anacrolix/go-libutp v1.1.0/go.mod h1:so9zroOUhFPGnIkddyflaCCl+xdTsRSq97/AOQ2/Hjk= ++github.com/anacrolix/generics v0.0.0-20220217222028-44932cf46edd h1:u0sIIPDd4zM287UxlhCtIJURZyYsPQQAyZGBaO0nAy0= ++github.com/anacrolix/generics v0.0.0-20220217222028-44932cf46edd/go.mod h1:SommN0/3j+jrAnjopAZfqkREMGw59ELwloDcx6Y0KLA= +github.com/anacrolix/go-libutp v1.2.0 h1:sjxoB+/ARiKUR7IK/6wLWyADIBqGmu1fm0xo+8Yy7u0= +github.com/anacrolix/go-libutp v1.2.0/go.mod h1:RrJ3KcaDcf9Jqp33YL5V/5CBEc6xMc7aJL8wXfuWL50= github.com/anacrolix/log v0.3.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU= github.com/anacrolix/log v0.6.0/go.mod h1:lWvLTqzAnCWPJA08T2HCstZi0L1y2Wyvm3FJgwU9jwU= +github.com/anacrolix/log v0.10.0/go.mod h1:s5yBP/j046fm9odtUTbHOfDUq/zh1W8OkPpJtnX0oQI= github.com/anacrolix/log v0.10.1-0.20220123034749-3920702c17f8/go.mod h1:GmnE2c0nvz8pOIPUSC9Rawgefy1sDXqposC2wgtBZE4= github.com/anacrolix/log v0.13.1 h1:BmVwTdxHd5VcNrLylgKwph4P4wf+5VvPgOK4yi91fTY= github.com/anacrolix/log v0.13.1/go.mod h1:D4+CvN8SnruK6zIFS/xPoRJmtvtnxs+CSfDQ+BFxZ68= @@@ -68,10 -64,10 +67,10 @@@ github.com/anacrolix/missinggo/v2 v2.5. github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw= github.com/anacrolix/mmsg v1.0.0 h1:btC7YLjOn29aTUAExJiVUhQOuf/8rhm+/nWCMAnL3Hg= github.com/anacrolix/mmsg v1.0.0/go.mod h1:x8kRaJY/dCrY9Al0PEcj1mb/uFHwP6GCJ9fLl4thEPc= - github.com/anacrolix/multiless v0.2.0 h1:HtGBBOQcHaJM59RP3ysITId7AMIgiNF4xJucaFh14Ms= - github.com/anacrolix/multiless v0.2.0/go.mod h1:TrCLEZfIDbMVfLoQt5tOoiBS/uq4y8+ojuEVVvTNPX4= + github.com/anacrolix/multiless v0.2.1-0.20211218050420-533661eef5dc h1:K047jUtd0Xv4SEpv/5DoBgDvj4ZNpT1SOVtMlFpRrh0= + github.com/anacrolix/multiless v0.2.1-0.20211218050420-533661eef5dc/go.mod h1:TrCLEZfIDbMVfLoQt5tOoiBS/uq4y8+ojuEVVvTNPX4= -github.com/anacrolix/squirrel v0.4.0 h1:MOxYwh0mD2rcEJT+N2tFj2Z3dBDrWn6kRxP4qsBxfyk= -github.com/anacrolix/squirrel v0.4.0/go.mod h1:dJyE7VefQvX0KAKMkOQDGOVEs91a+LvXQ2BjEKl/DIw= +github.com/anacrolix/squirrel v0.4.1-0.20220122230132-14b040773bac h1:eddZTnM9TIy3Z9ARLeDMlUpEjcs0ZdoFMXSG0ChAHvE= +github.com/anacrolix/squirrel v0.4.1-0.20220122230132-14b040773bac/go.mod h1:YzgVvikMdFD441oTWlNG189bpKabO9Sbf3uCSVgca04= github.com/anacrolix/stm v0.2.0/go.mod h1:zoVQRvSiGjGoTmbM0vSLIiaKjWtNPeTvXUSdJQA4hsg= github.com/anacrolix/stm v0.3.0 h1:peQncJSNJtk1YBrFbW0DLKYqll+sa0kOk8EvXRcO+wA= github.com/anacrolix/stm v0.3.0/go.mod h1:spImf/rXwiAUoYYJK1YCZeWkpaHZ3kzjGFjwK5OStfU= diff --cc torrent.go index 8f50879c,bbe57f61..f6be6978 --- a/torrent.go +++ b/torrent.go @@@ -19,8 -20,10 +20,9 @@@ import "github.com/anacrolix/chansync" "github.com/anacrolix/chansync/events" "github.com/anacrolix/dht/v2" + . "github.com/anacrolix/generics" "github.com/anacrolix/log" "github.com/anacrolix/missinggo/perf" - "github.com/anacrolix/missinggo/pubsub" "github.com/anacrolix/missinggo/slices" "github.com/anacrolix/missinggo/v2" "github.com/anacrolix/missinggo/v2/bitmap" @@@ -148,9 -150,7 +150,11 @@@ type Torrent struct // Is On when all pieces are complete. Complete chansync.Flag + // Torrent sources in use keyed by the source string. + activeSources sync.Map + sourcesLogger log.Logger ++ + smartBanCache smartBanCache } func (t *Torrent) selectivePieceAvailabilityFromPeers(i pieceIndex) (count int) { @@@ -2315,11 -2367,12 +2379,12 @@@ func (t *Torrent) addWebSeed(url string // requests mark more often, so recomputation is probably sooner than with regular peer // conns. ~4x maxRequests would be about right. PeerMaxRequests: 128, - RemoteAddr: remoteAddrFromUrl(url), - callbacks: t.callbacks(), + // TODO: Set ban prefix? + RemoteAddr: remoteAddrFromUrl(url), + callbacks: t.callbacks(), }, client: webseed.Client{ - HttpClient: t.cl.webseedHttpClient, + HttpClient: t.cl.httpClient, Url: url, ResponseBodyWrapper: func(r io.Reader) io.Reader { return &rateLimitedReader{