Matt Joiner
57b679ffb0
Add a note about dropping connections that we sent a HAVE for incomplete pieces
2016-11-23 11:52:41 +11:00
Matt Joiner
4807c9e29a
Make Torrent.conns a map
...
Can't remember if I've tried this before. But dropping arbitrary connections while iterating established conns will become much simpler.
2016-11-23 11:48:44 +11:00
Matt Joiner
ebbd555e7b
Move a bunch of Client methods onto more appropriate types
2016-11-22 21:12:53 +11:00
Matt Joiner
90ca45dd2d
Don't accept pieces with bad indexes
...
Fixes #132
2016-11-22 14:20:48 +11:00
Matt Joiner
df60a765a7
Torrent.unpendPieces: Only update unpended pieces
...
Updating all pieces at once is no longer faster. (There was an optimization for this a while ago that no longer exists.)
2016-10-31 19:05:08 +11:00
Matt Joiner
a8e96ce996
When Reader position changes only update piece priorities that may be affected
...
Seems to significantly reduce CPU load reading from torrents with huge piece counts.
2016-10-31 19:00:08 +11:00
Matt Joiner
95f73db7e4
Ditch the use of generic slices.HeapInterface for finding the worst "bad" connection
...
It's become a bottleneck. Implement it directly using heap.Interface.
2016-10-31 16:24:48 +11:00
Matt Joiner
1725133111
Move the implementation of connection.requestPiecePendingChunks out of Torrent
2016-10-25 14:58:17 +11:00
Matt Joiner
0e221dbdcd
Optimize piece priorities when reader position changes
...
Gives a decent boost to throughput and reduces a lot of CPU when reading very quickly from Reader.
2016-10-23 16:33:26 +11:00
Matt Joiner
de761fb506
Do chunk pooling at Torrent instead of connection level
2016-10-05 15:57:00 +11:00
Matt Joiner
1e919dd6b1
Rework storage interfaces to make them simpler to implement
...
This allows lots of behaviour to be baked into the new Client, Torrent and Piece wrappers, rather than duplicating (badly) them in all the backend implementations.
2016-09-02 15:10:57 +10:00
Matt Joiner
8b17d2a63a
Rework Reader position changes affecting piece priorities
...
Torrent.updatePiecePriorities is always followed by Torrent.piecePriorityChanged, so move it into the former function. Also drop the separate mutex for Reader, and add a missing Reader.posChanged call.
2016-08-30 15:41:26 +10:00
Matt Joiner
6c15a030d6
Improve comments
2016-08-30 15:07:59 +10:00
Matt Joiner
2a1cef7c9e
Remove the InfoEx type, and don't generate its infohash on the fly
...
Fixes #106 .
2016-08-26 20:29:05 +10:00
Matt Joiner
6065a55818
Fix some more races in the status writing
2016-08-02 11:18:33 +10:00
Matt Joiner
1ca2e7e95a
Add some extra conditions to prevent network activity when a torrent is closed
...
From suggestions by @axet, this might be a thing sometimes.
2016-07-30 00:41:45 +10:00
Matt Joiner
4143b7470d
Begin exposing all the magic that Client.WriteStatus has so people can parse Client state their own way
...
It wasn't possible to move Client.WriteStatus to an external package to verify it doesn't depend on same-package access to data because then it can't be used in the tests, and it's extremely useful there. So I've settled for not locking the Client, and trying to use all the public methods. It's a work in progress.
2016-07-30 00:37:52 +10:00
Alexey Kuznetsov
49315045a0
it is actually sha1 hash size
2016-07-29 22:50:58 +10:00
Matt Joiner
3c75f68413
Kick connections that contribute the final piece of missing metadata that fails to validate
...
Failing to get metainfo was resetting Torrent.metadataBytes, which caused arriving metadata data to appear to belong to nonexistent pieces, despite passing the check that we'd in fact requested them from the sending connection. This was unnecessarily noisy. Instead return an error if we got all the data, but couldn't set the Torrent's info bytes, that should propagate out and cause the connection that contributed the final missing piece to be dropped. This will at least provide some improved resistance to unfriendly behaviour on the network.
2016-07-24 00:34:40 +10:00
Matt Joiner
980cd69ab2
Break up the DHT announcer code into smaller functions, and add a 5 minute delay between announces
2016-07-23 22:38:31 +10:00
Matt Joiner
f5d58b3dc6
Unused *Client argument to Torrent.writeStatus
2016-07-12 21:23:20 +10:00
Matt Joiner
29844b8b6c
Few slices name changes
2016-07-12 17:49:00 +10:00
Matt Joiner
507daba528
Rework tracker scraper code to allow tracker stats
...
Inspired by @axet's work.
2016-07-12 16:44:06 +10:00
Matt Joiner
6e399e8f50
Add test for issue #97
2016-07-12 16:42:54 +10:00
Matt Joiner
fbe0ded844
Add connection read stats
2016-07-12 16:42:04 +10:00
Matt Joiner
a4e140b939
New slices package
2016-07-12 16:40:14 +10:00
Matt Joiner
a6cecc6b5f
missinggo.Sort->SortSlice
2016-07-07 14:14:59 +10:00
Matt Joiner
240abaf512
Add Torrent.SetMaxEstablishedConns
2016-07-06 00:42:16 +10:00
Matt Joiner
326b36545b
Prepare to allow max conns per torrent to be configured
2016-07-05 16:23:17 +10:00
Matt Joiner
12191dbfa3
Add counters for uploads
...
Fixes #71 .
2016-07-05 15:52:33 +10:00
Matt Joiner
12486412b3
Remove redundant check in Torrent.SetInfoBytes
2016-06-27 15:46:43 +10:00
Matt Joiner
afc76861e0
Throw away Torrent display name when info becomes available
2016-06-27 15:46:27 +10:00
Matt Joiner
b84298351a
Move a few methods to Torrent, and track how many DHT announces occur
...
I suspect that DHT announces may occur too regularly, or without a break for torrents that aren't able to get over the lower water pending peer mark.
2016-06-15 15:29:47 +10:00
Matt Joiner
c2bdb31bb3
Client.announceTorrentDHT -> Torrent.announceDHT
2016-06-15 15:13:53 +10:00
Matt Joiner
d8dc3ad239
Torrent.MetaInfo: don't crash if info isn't available yet
2016-05-23 20:08:18 +10:00
Matt Joiner
56a89905b6
Update Torrent.wantPeersEvent when info is obtained
2016-05-23 11:11:56 +10:00
Matt Joiner
c6ec935e53
Update Torrent.wantPeersEvent in several places
2016-05-23 10:19:14 +10:00
Matt Joiner
512aa7ede4
Don't start tracker scrapers if trackers are disabled
2016-05-22 23:44:08 +10:00
Matt Joiner
20870ec4ff
Rework torrent tracker scraping
...
New scrapers are added anytime trackers are added to a torrent. In the future they will also be stopped as soon as they're removed. All trackers are concurrently scraped, the old-style of sticking to one tracker that works is abandoned for now.
2016-05-22 22:45:08 +10:00
Matt Joiner
8cdcbe9d40
Fix the tracker method receivers and names
2016-05-19 23:58:00 +10:00
Matt Joiner
7600ac70e3
Move torrent tracker methods into torrent.go
2016-05-19 22:49:37 +10:00
Matt Joiner
02ea8b1081
Rename storage.I->Client
2016-05-16 21:50:43 +10:00
Matt Joiner
6f470a2d02
Don't log missing files during hashing
2016-05-16 19:50:46 +10:00
Matt Joiner
c0283d3314
Return an error from Torrent.setMetadataSize
...
This should mean connections sending ridiculous metadata sizes get dropped.
2016-05-16 18:48:56 +10:00
Matt Joiner
d2951c6c4b
Move requestPendingMetadata onto connection from Client
2016-05-16 18:46:38 +10:00
Matt Joiner
2b46a17b39
Bit of a tidy in the tracker code
2016-05-12 12:43:37 +10:00
Matt Joiner
528836ab4c
Get rid of obsoleted Torrent.ceaseNetworking, and clean up Torrent.closing
2016-05-11 21:44:55 +10:00
Matt Joiner
a45a09b877
Rework setting of info bytes
2016-05-09 15:47:39 +10:00
Matt Joiner
2d160b0419
metainfo.InfoEx.Hash becomes a function, UpdateBytes is added, and Bytes used in marshalling
...
Fixes #80 .
2016-05-05 22:40:38 +10:00
Matt Joiner
f6b83130c9
Move a bunch of Torrent methods from client.go
2016-05-03 16:47:11 +10:00