]>
 
 
Sergey Matveev's repositories - btrtrc.git/log 
 
 
 
 
 
 
Matt Joiner [Sat, 18 Sep 2021 03:50:55 +0000 (13:50 +1000)] 
 
Add some tests verifying request map ordering 
 
Matt Joiner [Sat, 18 Sep 2021 03:23:36 +0000 (13:23 +1000)] 
 
Update anacrolix/args for bool Flag fix 
 
Matt Joiner [Thu, 16 Sep 2021 07:10:07 +0000 (17:10 +1000)] 
 
requesting: Remove some obsoleted condition checks 
 
These shouldn't be necessary since peers were pruned for the ability to allocate chunks to the current piece. 
 
Matt Joiner [Thu, 16 Sep 2021 07:08:59 +0000 (17:08 +1000)] 
 
request_strategy.Peer.canRequestPiece performance: Reorder conditions 
 
YenForYang [Sat, 18 Sep 2021 02:44:47 +0000 (21:44 -0500)] 
 
bencode: get type of `big.Int` without creating instance (#651)
Nope, it doesn't really matter. But anyway, see https://github.com/golang/crypto/blob/
c084706c2272f3d44b722e988e70d4a58e60e7f4 /cryptobyte/asn1.go#L267
 
YenForYang [Sat, 18 Sep 2021 02:43:53 +0000 (21:43 -0500)] 
 
bencode: simplify getting `marshalerType` and `unmarshalerType` (#652) 
 
YenForYang [Sat, 18 Sep 2021 02:42:20 +0000 (21:42 -0500)] 
 
bencode: Simplify `(*Decoder).parseListInterface()` (#656) 
 
Preserve as much type as possible (it'll be converted to an `interface{}` anyway, but we can return `[]interface{}` instead of `{}interface` here). 
 
YenForYang [Sat, 18 Sep 2021 02:36:25 +0000 (21:36 -0500)] 
 
Prevent allocation when checking interface (#649) 
 
YenForYang [Sat, 18 Sep 2021 01:35:21 +0000 (20:35 -0500)] 
 
metainfo: Remove reflection dependency for `Piece.Hash()` (#661) 
 
`copy`  will copy exactly `HashSize` bytes here. 
 
YenForYang [Fri, 17 Sep 2021 03:08:00 +0000 (22:08 -0500)] 
 
lockWithDeferreds: inlineable Unlock() (#603) 
 
Matt Joiner [Thu, 16 Sep 2021 00:47:27 +0000 (10:47 +1000)] 
 
requesting: Filter peers that can't be allocated chunks 
 
Matt Joiner [Wed, 15 Sep 2021 14:12:58 +0000 (00:12  +1000)] 
 
Rejig waits between doRequests 
 
Matt Joiner [Wed, 15 Sep 2021 14:12:24 +0000 (00:12  +1000)] 
 
Performance improvements in piece requesting 
 
Matt Joiner [Wed, 15 Sep 2021 00:30:37 +0000 (10:30 +1000)] 
 
Change torrent capacity to not return a pointer 
 
It's an unnecessary complication for a storage implementer. 
 
Matt Joiner [Sat, 11 Sep 2021 11:17:47 +0000 (21:17 +1000)] 
 
Simplify PIece.iterUndirtiedChunks 
 
Matt Joiner [Sat, 11 Sep 2021 11:17:31 +0000 (21:17 +1000)] 
 
Pre-allocate request strategy pieces 
 
Matt Joiner [Tue, 7 Sep 2021 02:08:31 +0000 (12:08 +1000)] 
 
cmd/torrent: Use anacrolix/args and merge several other cmds in as subcommands 
 
YenForYang [Wed, 15 Sep 2021 00:28:14 +0000 (19:28 -0500)] 
 
Inlineable `(*Torrent).Seeding()` (#626) 
 
YenForYang [Wed, 15 Sep 2021 00:27:52 +0000 (19:27 -0500)] 
 
Inlineable `(*Torrent).SetDisplayName()` (#625) 
 
YenForYang [Wed, 15 Sep 2021 00:14:28 +0000 (19:14 -0500)] 
 
Inlineable `(*Torrent).PieceState()` (#621) 
 
YenForYang [Wed, 15 Sep 2021 00:14:07 +0000 (19:14 -0500)] 
 
Inlineable `(*Torrent).AddPeers()` (#622) 
 
YenForYang [Wed, 15 Sep 2021 00:13:46 +0000 (19:13 -0500)] 
 
Inlineable `DownloadPieces()` and `CancelPieces()` (#623) 
 
YenForYang [Tue, 14 Sep 2021 13:01:20 +0000 (08:01 -0500)] 
 
Create default constructor for Client (#567) 
 
Allow for certain values to always be properly initialized on construction -- namely the maps for now. I'm currently working on a change that requires a baseline constructor; this change would make the use of `chansync.BroadcastCond` and `chansync.SetOnce` obsolete -- i.e. one can have channel members without worrying about proper initialization/destruction of a `chan struct{}`. 
 
As for why `makeClient` returns a value instead of a pointer: returning a value gives us more options -- you can always take a pointer from a value later on cheaply, and have things moved to the heap if they weren't already. The same can't be said about getting a value back from a pointer. GC also could potentially have less work to do. Plus I personally find ownership to be an important concept (semi-borrowed from rust) -- use of values make ownership clear. 
 
YenForYang [Tue, 14 Sep 2021 12:36:19 +0000 (07:36 -0500)] 
 
Clarify maximum value of "metadata_size" (#609) 
 
YenForYang [Tue, 14 Sep 2021 12:11:35 +0000 (07:11 -0500)] 
 
Inlineable `(*File).BytesCompleted()` (#612) 
 
YenForYang [Tue, 14 Sep 2021 11:54:37 +0000 (06:54 -0500)] 
 
Optimize `LoopbackListenHost()` (#615) 
 
YenForYang [Tue, 14 Sep 2021 04:05:37 +0000 (23:05 -0500)] 
 
Inlineable (*reader).SetReadAhead and (*reader).Close (#594) 
 
Small fixes that prevent inlining of public functions 
 
YenForYang [Tue, 14 Sep 2021 03:46:50 +0000 (22:46 -0500)] 
 
Drop bradfitz/iter dependency (#605) 
 
* Drop bradfitz/iter dependency 
 
`range iter.N` looks nice and doesn't allocate, but unfortunately using a `range` expression blocks a function from being inlined wherever it's used (for now). It's not that we need inlining in all cases, but I do think a C-style for loop looks just as nice and is probably clearer to the majority. There also aren't any clear disadvantages to changing (unless you just happen to dislike the look of C) 
 
* Update misc_test.go 
 
* Update rlreader_test.go 
 
* Update torrent_test.go 
 
* Update bench_test.go 
 
* Update client_test.go 
 
* Update iplist_test.go 
 
* Update mse_test.go 
 
* Update peerconn_test.go 
 
* Update peerconn.go 
 
* Update order_test.go 
 
* Update decoder_test.go 
 
* Update main.go 
 
* Update bench-piece-mark-complete.go 
 
* Update main.go 
 
* Update torrent.go 
 
* Update iplist_test.go 
 
* Update main.go 
 
YenForYang [Tue, 14 Sep 2021 00:41:04 +0000 (19:41 -0500)] 
 
Cheaper byte to string conversion (#602) 
 
Revamped https://github.com/anacrolix/torrent/pull/587 
 
YenForYang [Mon, 13 Sep 2021 12:52:58 +0000 (07:52 -0500)] 
 
Inlineable reader.Seek and no-lock return for bad whence (#577) 
 
* Inlineable reader.Seek and no-lock return for bad whence 
 
Couldn't find an elegant way to early exit on bad whence. Using a closure could reduce code duplication slightly, but it's overkill for only 3 cases. 
 
Note that returning 0 on an invalid whence is the behavior of `strings.Reader` and `bytes.Reader`. 
 
* Update reader.go 
 
YenForYang [Mon, 13 Sep 2021 11:35:51 +0000 (06:35 -0500)] 
 
Fix usages of eachListener() and make inlineable (#599) 
 
YenForYang [Mon, 13 Sep 2021 11:17:54 +0000 (06:17 -0500)] 
 
Inlineable methods to access File piecePriority (#601) 
 
YenForYang [Mon, 13 Sep 2021 01:41:11 +0000 (20:41 -0500)] 
 
Simplify (*Torrent).gotMetainfo (#581) 
 
YenForYang [Mon, 13 Sep 2021 01:38:08 +0000 (20:38 -0500)] 
 
Remove xerrors dependency (#600) 
 
* Remove xerrors dependency 
 
* Update main.go 
 
YenForYang [Mon, 13 Sep 2021 01:36:35 +0000 (20:36 -0500)] 
 
Reorder fields to reduce padding in reader (#597) 
 
Reorder some of the fields to reduce the size of `reader`. Not much of a change -- original size was 104 bytes, with changes (moving bool's to the end) the size is 96 bytes. There's also the whole cache-friendly bit -- I tried reordering fields to help here, but I doubt it makes much of a difference. 
 
Some other notes: `sync.Locker` is a 16 byte field. I suggest changing this to something like `*sync.RWMutex` or `*lockWithDeferreds`. This would not only reduce size but would allow access to `RLock`/`RUnlock`. 
`pieceRange` could also be shrunk to 8 bytes, but I feel like I'm probably asking for too much lol. 
 
YenForYang [Sun, 12 Sep 2021 04:14:07 +0000 (23:14 -0500)] 
 
Update ReadCloser interface check to ReadSeekCloser (#595) 
 
Matt Joiner [Sun, 12 Sep 2021 04:11:59 +0000 (14:11 +1000)] 
 
Fix http announce of infohash containing ' ' bytes (#591) 
 
Fixes https://github.com/anacrolix/torrent/issues/534. 
 
Matt Joiner [Fri, 10 Sep 2021 04:15:45 +0000 (14:15 +1000)] 
 
Don't call Client onClose handlers until torrent storages are closed 
 
Matt Joiner [Fri, 10 Sep 2021 04:14:57 +0000 (14:14 +1000)] 
 
Fix Torrent.Drop to wait for storage close without client lock 
 
YenForYang [Fri, 10 Sep 2021 22:26:43 +0000 (17:26 -0500)] 
 
Avoid allocating memory when checking interface (#588) 
 
Not a big deal, but there isn't a need to allocate an object to check that `*Node` satisfies `bencode.Unmarshaler`. 
 
Matt Joiner [Fri, 10 Sep 2021 13:06:23 +0000 (23:06 +1000)] 
 
Optimize peersForPieces allocations for make and sorting 
 
Matt Joiner [Fri, 10 Sep 2021 13:02:20 +0000 (23:02 +1000)] 
 
Optimize requesting peerId Uintptr allocation 
 
Matt Joiner [Fri, 10 Sep 2021 12:13:39 +0000 (22:13 +1000)] 
 
Disable ensureValidSortedPeersForPieceRequests 
 
Should approximately half the contribution of the parent function to overhead. 
 
Matt Joiner [Fri, 10 Sep 2021 12:12:08 +0000 (22:12 +1000)] 
 
Optimize sortPeersForPiece in allocatePendingChunks 
 
Matt Joiner [Fri, 10 Sep 2021 11:48:44 +0000 (21:48 +1000)] 
 
Optimize Torrent.worstBadConn 
 
Matt Joiner [Fri, 10 Sep 2021 10:58:11 +0000 (20:58 +1000)] 
 
Remove reader.opMu 
 
https://github.com/anacrolix/torrent/issues/553 
 
Matt Joiner [Thu, 9 Sep 2021 12:51:24 +0000 (22:51 +1000)] 
 
go fmt ./... 
 
Matt Joiner [Thu, 9 Sep 2021 12:49:22 +0000 (22:49 +1000)] 
 
Fix possible misuse of reflect.StringHeader 
 
YenForYang [Thu, 9 Sep 2021 12:39:12 +0000 (07:39 -0500)] 
 
useTorrentSources: fix http request resource leak (#562) 
 
YenForYang [Thu, 9 Sep 2021 12:27:16 +0000 (07:27 -0500)] 
 
Clarify ownership of (*Torrent).chunkPool (#583) 
 
Basically bind the lifetime of chunkPool to the torrent by using `sync.Pool` in lieu of `*sync.Pool`. Gives the GC ever so slightly less work to do. 
 
Matt Joiner [Thu, 9 Sep 2021 12:19:29 +0000 (22:19 +1000)] 
 
Don't readahead until a read occurs 
 
Matt Joiner [Thu, 9 Sep 2021 12:16:24 +0000 (22:16 +1000)] 
 
Make readahead algorithm linear 
 
Matt Joiner [Thu, 9 Sep 2021 10:55:09 +0000 (20:55 +1000)] 
 
Add default sqrt readahead algorithm 
 
Matt Joiner [Thu, 9 Sep 2021 07:41:12 +0000 (17:41 +1000)] 
 
Extract common Torrent.newReader 
 
Matt Joiner [Thu, 9 Sep 2021 12:12:29 +0000 (22:12 +1000)] 
 
Add Webtor to downstream projects 
 
Matt Joiner [Thu, 9 Sep 2021 02:58:07 +0000 (12:58 +1000)] 
 
Fix unit tests littering working directory 
 
Matt Joiner [Wed, 8 Sep 2021 03:46:03 +0000 (13:46 +1000)] 
 
Update README.md 
 
Matt Joiner [Wed, 8 Sep 2021 03:45:25 +0000 (13:45 +1000)] 
 
Update README.md 
 
YenForYang [Tue, 7 Sep 2021 23:34:06 +0000 (18:34 -0500)] 
 
Drop xerrors and missinggo/slices dependency for Client (#572) 
 
* Drop xerrors and missinggo/slices dependency for Client 
 
Made `BadPeerIPs` inlineable since I changed `badPeerIPsLocked` anyway. Also eliminated an extra torrentsAsSlice copy since Go wasn't smart enough to figure it out. 
 
Zilog8 [Sun, 5 Sep 2021 01:33:41 +0000 (21:33 -0400)] 
 
Improve Closing (#559) 
 
- Prevent double-closing in cmd/torrent 
- Move async closing from storage to torrents, and wait on them to finish tidying up before returning/exiting. 
 
Matt Joiner [Sat, 4 Sep 2021 13:34:06 +0000 (23:34 +1000)] 
 
Update chansync 
 
Matt Joiner [Thu, 2 Sep 2021 10:54:22 +0000 (20:54 +1000)] 
 
Return error on sqlite PieceCompletion.Set when closed 
 
Matt Joiner [Thu, 2 Sep 2021 10:53:49 +0000 (20:53 +1000)] 
 
Rework Reader waiting 
 
YenForYang [Sat, 4 Sep 2021 02:24:35 +0000 (21:24 -0500)] 
 
Simplify dhtPort() 
 
A similar case of `haveDhtServer` 
 
YenForYang [Sat, 4 Sep 2021 06:30:14 +0000 (01:30  -0500)] 
 
Drop xerrors and reflection dependency 
 
Nothing wrong with missinggo.CopyExact -- but fewer dependencies is better IMO.  Also changed String() to use a consistent receiver name -- not a big deal. 
 
afjoseph [Thu, 2 Sep 2021 12:31:09 +0000 (14:31 +0200)] 
 
[gomod] Update anacrolix/dht and run 'go mod tidy' 
 
YenForYang [Fri, 3 Sep 2021 03:03:47 +0000 (22:03 -0500)] 
 
Simplify haveDhtServers() 
 
A bit too much functional programming, lol. 
 
Matt Joiner [Thu, 2 Sep 2021 04:19:29 +0000 (14:19 +1000)] 
 
Merge branch 'master' into squirrel 
 
Matt Joiner [Thu, 2 Sep 2021 00:31:47 +0000 (10:31 +1000)] 
 
go get -u ./... 
 
Matt Joiner [Thu, 2 Sep 2021 00:21:56 +0000 (10:21 +1000)] 
 
Add generics TODO 
 
Matt Joiner [Thu, 2 Sep 2021 00:21:46 +0000 (10:21 +1000)] 
 
Add "no name" handling and storage.NewFileOpts
This came out of testing against Transmission in https://github.com/anacrolix/torrent/discussions/556#discussioncomment-
1263670 .
 
Matt Joiner [Wed, 1 Sep 2021 23:28:29 +0000 (09:28 +1000)] 
 
./cmd/torrent-create: Update the builtin announce list 
 
Matt Joiner [Wed, 1 Sep 2021 06:17:23 +0000 (16:17 +1000)] 
 
Fix info name when building from . and .. 
 
Matt Joiner [Wed, 1 Sep 2021 05:26:12 +0000 (15:26 +1000)] 
 
cmd/torrent download: Don't seed if no torrents are specified 
 
Matt Joiner [Wed, 1 Sep 2021 05:25:46 +0000 (15:25 +1000)] 
 
Fix panic on double Close of sqlite piece completion DB 
 
YenForYang [Wed, 1 Sep 2021 04:06:25 +0000 (23:06 -0500)] 
 
PieceStateRuns: reduce copying and make inlineable 
 
Just a heads up: using `range` and/or `defer` prevents function inlining. This is fine for infrequently called functions and/or large functions, but for simple public methods like these, I'd assume it's better for them to be inlined. 
 
Matt Joiner [Mon, 30 Aug 2021 01:48:34 +0000 (11:48 +1000)] 
 
Fix some DeepSource lints 
 
Matt Joiner [Mon, 30 Aug 2021 01:19:16 +0000 (11:19 +1000)] 
 
Set Go CI workflow to use Go 1.17 
 
Matt Joiner [Thu, 26 Aug 2021 01:20:52 +0000 (11:20 +1000)] 
 
go mod tidy 
 
Matt Joiner [Thu, 26 Aug 2021 01:20:37 +0000 (11:20 +1000)] 
 
Add function to wrap squirrel.Cache as storage.ClientImpl 
 
Matt Joiner [Thu, 26 Aug 2021 01:19:39 +0000 (11:19 +1000)] 
 
Update squirrel 
 
Matt Joiner [Wed, 25 Aug 2021 04:37:00 +0000 (14:37 +1000)] 
 
Use separate squirrel module 
 
Matt Joiner [Wed, 25 Aug 2021 02:35:07 +0000 (12:35 +1000)] 
 
Removed unused sqlite "provider" storage 
 
Matt Joiner [Tue, 24 Aug 2021 12:24:39 +0000 (22:24 +1000)] 
 
Embed SQL 
 
Matt Joiner [Tue, 24 Aug 2021 08:37:38 +0000 (18:37 +1000)] 
 
Implement {Set,Get}Tag on SquirrelBlob 
 
Matt Joiner [Tue, 24 Aug 2021 07:52:31 +0000 (17:52 +1000)] 
 
Begin extracting 'squirrel' from storage/sqlite 
 
Matt Joiner [Sun, 22 Aug 2021 10:05:53 +0000 (20:05 +1000)] 
 
Avoid reallocating keep alive timer on each pass 
 
Matt Joiner [Sun, 22 Aug 2021 06:59:40 +0000 (16:59 +1000)] 
 
Don't run linter on master branch 
 
Super unimpressed with this pedantic rubbish. PRs to adjust the settings welcome. 
 
Matt Joiner [Sun, 22 Aug 2021 05:52:35 +0000 (15:52 +1000)] 
 
Update install command 
 
Matt Joiner [Thu, 19 Aug 2021 06:12:28 +0000 (16:12 +1000)] 
 
Change linter workflow branches and name 
 
Matt Joiner [Thu, 19 Aug 2021 06:06:46 +0000 (16:06 +1000)] 
 
Remove unused code 
 
Matt Joiner [Thu, 19 Aug 2021 06:06:24 +0000 (16:06 +1000)] 
 
Update staticcheck go target to 1.16 
 
Matt Joiner [Thu, 19 Aug 2021 06:05:58 +0000 (16:05 +1000)] 
 
Disable excessively pedantic linters 
 
Matt Joiner [Thu, 19 Aug 2021 03:35:52 +0000 (13:35 +1000)] 
 
Fix data race closing incoming PeerConn 
 
Matt Joiner [Wed, 18 Aug 2021 06:56:05 +0000 (16:56 +1000)] 
 
Set direct sqlite storage conn to nil on close 
 
This might help catch the reason for SQLITE_MISUSE in getCapacity. 
 
Matt Joiner [Wed, 18 Aug 2021 06:51:30 +0000 (16:51 +1000)] 
 
Rewrite peerConnMsgWriter.run 
 
Matt Joiner [Wed, 18 Aug 2021 06:23:51 +0000 (16:23 +1000)] 
 
Set testing keep alive timeout to 1 millisecond 
 
If it's too fast, we get stuck trying to send keep alives rather than actually communicating with the peer. 
 
Matt Joiner [Wed, 18 Aug 2021 06:23:04 +0000 (16:23 +1000)] 
 
Fix deadlock when checking whether to send keep alive 
 
Matt Joiner [Wed, 18 Aug 2021 04:49:13 +0000 (14:49 +1000)] 
 
Limit keep alives for rate limited download test 
 
Matt Joiner [Wed, 18 Aug 2021 04:48:25 +0000 (14:48 +1000)] 
 
Fix race in assigning keep alive timer