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
Matt Joiner
28c9ec2bd1
Some changes to metainfo.InfoEx and testutil
2016-04-30 11:07:29 +10:00
Seth Hoenig
9f4bf70e17
refactor struct identifiers to follow conventional go names
2016-04-18 23:11:11 -05:00
Matt Joiner
da4d40ed7e
Merge all our global consts and vars into global.go
...
For easier referral to other parties.
2016-04-14 17:19:07 +10:00
Matt Joiner
48871324f4
Comments and logs around bad metadata size
2016-04-07 19:13:51 +10:00
Matt Joiner
49a3c87a53
Fix possible deadlock
2016-04-04 20:39:57 +10:00
Matt Joiner
82ee860e8d
Apply unconvert linter
2016-04-04 15:28:25 +10:00
Matt Joiner
1566e2afdc
Remove deadcode
2016-04-04 15:18:51 +10:00
Matt Joiner
b80bb6393a
Use metainfo.Hash for piece and info hashes
2016-04-04 13:01:31 +10:00
Matt Joiner
d3a1c79c79
Merge Torrent and torrent types
2016-04-03 18:40:43 +10:00
Matt Joiner
501ae0c98c
Comments
2016-04-03 16:52:52 +10:00
Matt Joiner
08830b97a1
Make everything on type torrent private
2016-04-03 16:50:53 +10:00
Matt Joiner
bc8fb2a165
If we fail to write to a piece, check its completion state
2016-04-03 16:36:57 +10:00
Matt Joiner
a5b54f21a1
Make opening a torrent in storage an explicit method
...
This is storage types where opening can fail, like mmap
2016-03-28 22:40:29 +11:00
Matt Joiner
775cf53809
Get mmap storage working
2016-03-28 21:57:04 +11:00
Matt Joiner
b97b50aca9
New storage interface
2016-03-28 20:38:30 +11:00
Matt Joiner
bb04cb8843
Tidy up bytesLeft calculations
...
This should fix a bug where completion is shown as negative in WriteStatus
2016-03-22 13:11:36 +11:00
Matt Joiner
e2ffcd008b
Add t.bytesLeftAnnounce
...
Now it's safe to remove tracker specific bytesLeft contract
2016-03-22 09:06:48 +11:00
Matt Joiner
61af11fddc
Off by one error in torrent.pieceLength?
2016-02-21 17:25:47 +11:00
Matt Joiner
5b443fb63d
Refresh all piece completion states when data is missing
2016-02-21 17:24:59 +11:00
Matt Joiner
e20858a1e8
Move dataReadAt to torrent.readAt, and do the waitNoPendingWrites check there
2016-02-21 03:32:59 +11:00
Matt Joiner
dcdf85a474
Ditch the torrent stateMu for the client mutex
2016-02-21 03:31:50 +11:00
Matt Joiner
f6472fc1fd
Code comment
2016-02-20 14:41:04 +11:00
Matt Joiner
d5f888069f
Ditch Data.WriteSectionTo, and fix cmd/torrent-verify
2016-02-18 11:45:31 +11:00
Matt Joiner
589ab02dc4
Ensure piece completion state is correct at startup
2016-02-17 17:20:21 +11:00
Matt Joiner
73208b97ca
Code comments
2016-02-17 17:09:43 +11:00
Matt Joiner
0f9f7ba01b
Add torrent.completedPieces bitmap
...
Reduce load on data.PieceComplete for torrents with lots of pieces, when reader position changes. Not sure of the improvement yet.
2016-02-17 00:00:55 +11:00
Matt Joiner
b514434581
Trigger piece request order changes on connections in a few spots
...
The client was requesting already obtained data in certain circumstances. This fixes it.
2016-02-11 17:57:57 +11:00
Matt Joiner
034c816934
torrent.piecePartiallyDownloaded incorrectly returned true when all the chunks were dirty
2016-02-10 00:46:54 +11:00
Matt Joiner
24b8b13d2d
Fix pending of already completed pieces when pending ranges of pieces
2016-02-08 21:36:50 +11:00
Matt Joiner
dab95b5431
Remove unreachable code
2016-02-08 03:01:54 +11:00
Matt Joiner
623d9e0e06
Rework requesting of shuffled pending pieces
2016-02-07 21:58:48 +11:00
Matt Joiner
dc215d083e
Export PieceStateChange through piece state change pubsub
2016-02-07 21:55:47 +11:00
Matt Joiner
0c28a0f1b1
Use new tracker package interface
2016-02-07 18:49:35 +11:00
Matt Joiner
77d6e9e5cb
Use new missinggo iterator style, and speed up torrent.connHasWantedPieces()
2016-02-07 01:22:31 +11:00
Matt Joiner
1b8bc1498c
Use missinggo.bitmap for tracking dirty chunks
2016-02-05 15:45:32 +11:00
Matt Joiner
6942f3e6d5
Changes to piece priority need to be published as a piece state change
...
This occurs because we're now able to deprioritize pieces after readers seek or close
2016-02-05 01:19:42 +11:00
Matt Joiner
63c73e18b3
Add File.Cancel
2016-02-05 01:18:54 +11:00
Matt Joiner
89f23c226c
Fix bug in readahead
2016-02-02 04:45:57 +11:00
Matt Joiner
430f26f726
Recalculate all piece priorities more efficiently
2016-02-01 22:06:13 +11:00
Matt Joiner
afa264e6c5
Reintroduce connection piece inclinations, and begin caching piece priorities
2016-02-01 21:11:41 +11:00
Matt Joiner
3ed628356b
Use missinggo.Event for connection closing event
2016-02-01 21:08:52 +11:00
Matt Joiner
b90dacd324
Abstract the pendingPieces as a bitmap
2016-02-01 01:46:28 +11:00
Matt Joiner
ae9bba2611
Fix downloading of unwanted chunks, and write out downloaded chunks using the connection loop goroutine
...
Doing the writes with the connection loop goroutine prevents memory use blowing out when chunks aren't written out quickly enough.
2016-01-28 05:54:48 +11:00
Matt Joiner
90348f6a48
Add pending write helpers
2016-01-25 07:22:33 +11:00
Matt Joiner
94d764e6be
Readers changing wasn't triggering waitAccept
...
Caused occasional stall in TestSeedAfterDownloading.
2016-01-25 04:14:19 +11:00
Matt Joiner
0ad4dda9fc
Move fillRequests and replenishConnRequests into connection.go
2016-01-24 15:21:17 +11:00
Matt Joiner
2f40c48d37
Fix the download/prioritize piece functions
...
This involves adding a pendingPieces field to torrent.
2016-01-19 01:28:56 +11:00
Matt Joiner
06445f2a1e
It's working and the tests are usually passing
...
I still need to handle "prefetch"-style downloading, and some functions haven't been committed to force this issue.
2016-01-18 18:35:14 +11:00
Matt Joiner
89a6a20af6
Finally make Torrent.torrent private
...
A lot of code was using unintentionally exported stuff from the embedded *torrent in Torrent.
2016-01-17 00:14:15 +11:00
Matt Joiner
2beb5f8bd4
Track dirty chunks, instead of pending chunk specs
...
This is the first step toward having purely Reader-based priorities. If a chunk is pending, that currently implies that we want to download it. I want to move that kind of state out to the readers.
2016-01-13 17:11:59 +11:00
Matt Joiner
153c13db43
Revert "Merge pull request #54 from zhulik/master"
...
This reverts commit 5cf75b869c
, reversing
changes made to 09050ff2c5
.
2016-01-06 12:19:49 +11:00
Gleb Sinyavsky
8637086ef9
Merge branch 'master' of https://github.com/anacrolix/torrent
2016-01-04 15:39:08 +03:00
Matt Joiner
8346ff81f7
Switch to int from peer_protocol.Integer for piece index in a lot of places
2016-01-04 22:34:24 +11:00
Gleb Sinyavsky
be8e44da3c
peersKey is a public type now
2015-12-27 15:27:32 +03:00
Matt Joiner
86c4c609f1
Expose Torrent.SetDisplayName
2015-12-12 14:03:04 +11:00
Matt Joiner
79eb1ca0d5
torrent.DisplayName should not be exported
2015-11-22 18:44:08 +11:00
Matt Joiner
d01c6221e6
Remove sync.Cond from piece
...
It's not trivial to ensure that anyone waiting on the piece Cond will wake on events like the torrent being dropped from the client.
2015-11-06 00:40:16 +11:00
Matt Joiner
c7cb1009a5
Fix #33 .
2015-10-20 17:53:12 +11:00
Matt Joiner
b3a8020401
Store pieces inplace in torrent.Pieces
...
This should save some allocation overhead, especially for torrents that have 20k+ pieces.
2015-10-16 22:10:03 +11:00
Matt Joiner
b0b5794890
Create a pieceStore interface, and merge in my httpfile backend, and replace data/blob
...
data/blob was aging, and had severe performance problems. It's now possible to use missinggo/filecache as a data backend to pieceStore which is better tested and performs excellently.
2015-10-04 00:22:46 +10:00
Matt Joiner
b7a8bb7570
Simplify the torrent Data interface
...
None of the methods are optional anymore. Removed the nasty wrappers for some data implementations. Moved data.Data back into the main torrent package. Should make it much easier to understand for people implementing their own Data implementations.
2015-10-02 00:09:04 +10:00
Matt Joiner
58c997210e
Track peer sources with a dict, and don't exceed high water mark
2015-09-28 15:30:13 +10:00
Matt Joiner
53259397fc
Initialize connection piece priorities lazily, and using a pool
2015-09-26 17:27:35 +10:00
Matt Joiner
52b0705956
Include num pieces in torrent status
2015-09-25 22:05:32 +10:00
Matt Joiner
f9ed9c4c04
Avoid frequent allocation of piece request order iterator
2015-09-20 11:29:52 +10:00
Matt Joiner
eebd09c0fe
Allow subscribing to torrent piece state changes
2015-09-06 12:33:22 +10:00
Matt Joiner
ef098c47ac
Needlessly convoluted
2015-08-19 13:29:01 +10:00
Matt Joiner
085be622a0
Replacing pendingWrites WaitGroup with Mutex/Cond/int
...
Apparently I've been using WaitGroups wrong all along.
2015-08-05 02:40:46 +10:00
Matt Joiner
85a0fe6b61
Drop peers for sending too many unwanted pieces
...
So the algorithm is now, drop the worst half if they get too old, and drop any connection if it's ratio is poor.
2015-08-04 01:32:45 +10:00
Matt Joiner
d077fed72d
Some utils moved to missinggo
2015-08-04 00:29:01 +10:00
Matt Joiner
0600c3b5e3
Several speedups in logic
2015-07-17 21:07:01 +10:00
Matt Joiner
7e9fe4f447
Store chunk data without holding client lock
2015-07-15 16:00:59 +10:00
Matt Joiner
c018c660f0
Allow chunk size to be specified per torrent
2015-07-15 15:31:18 +10:00
Matt Joiner
500f51d232
Some changes to writing torrent status
2015-06-30 00:46:24 +10:00
Matt Joiner
bb28ff7492
Replace pruning timer with as-required connection dropping
2015-06-30 00:45:26 +10:00