Matt Joiner
d77e939944
Synchronize access to storage
2017-12-01 23:09:07 +11:00
Matt Joiner
afa9d2ba28
Torrent.bytesLeft was taking a copy instead of pointer to Piece
2017-12-01 17:58:42 +11:00
Matt Joiner
2daa604eb2
Publish piece state changes after verifying piece
2017-12-01 14:03:05 +11:00
Matt Joiner
8f7720edb2
Merge commit '6ab65a49a8a72dea1a28968b2ab42a85fd4566ec'
...
# Conflicts:
# config.go
2017-11-08 20:23:15 +11:00
Matt Joiner
163a63f9a7
Torrent.Metainfo: Don't return incomplete metadata bytes
...
Fixes #208
2017-11-08 19:56:20 +11:00
Matt Joiner
3aa1e8f3ef
Add a test for behaviour after getting metadata_size and before GotInfo
...
#208
2017-11-08 19:31:10 +11:00
themihai
6ab65a49a8
feat(config): Allows the torrent client to customise the client identity and connection config
2017-11-07 20:14:13 +02:00
Matt Joiner
ff1bd84e7e
Fix #205
2017-11-08 00:34:59 +11:00
Matt Joiner
9757f04cf8
Apply megacheck to torrent package
2017-11-07 16:11:59 +11:00
Matt Joiner
2c6b842bbf
Remove noisy log message
2017-11-05 15:39:36 +11:00
Matt Joiner
361c8654c7
Add some TODOs
2017-11-05 15:39:35 +11:00
Samuel
3e74396c66
Aggressive Upload ( #203 )
...
* Aggressive Upload Config
* Aggressive Upload
* Flip config option.
* Flip Aggressive Upload Config Option
2017-11-05 14:04:33 +11:00
Matt Joiner
5d133ea387
Remove debug log message
2017-10-12 17:52:26 +11:00
Matt Joiner
dd083a4e11
Track completion known to implementation state
...
Addresses #193
2017-10-12 16:09:32 +11:00
Matt Joiner
17ea4f7fdd
Performance optimizations to calculating bytes left in Torrent
...
Was generating significant overhead in cmd/torrent
2017-09-23 15:28:13 +10:00
Matt Joiner
2c91d1e3fb
Changes to Bitmap referencing
2017-09-23 15:27:10 +10:00
Matt Joiner
6aad8041ab
Implement new request strategy
...
The new strategy, 2, has the fastest connection download by priority in order, and all other pieces stick to a randomized ordering that's stable per connection.
2017-09-23 15:25:47 +10:00
Matt Joiner
1f6a7eb810
It looks like Torrent.worstBadConn was returning an arbitrary bad connection, it wasn't the worst
...
heap.Init got lost somewhere along the way? Need a unit test for this.
2017-09-21 19:32:03 +10:00
Matt Joiner
bb53c97d38
Move uploading to the connection writer
2017-09-18 12:09:08 +10:00
Matt Joiner
ed0fa62340
Comment and formatting
2017-09-17 00:45:12 +10:00
Matt Joiner
69ffb9bc8d
Fix build error
2017-09-17 00:44:09 +10:00
Matt Joiner
846da66103
Merge pull request #188 from boramalper/KnownSwarm
...
added the initial version of the (t *Torrent) KnownSwarm() function
2017-09-17 00:20:00 +10:00
Bora M. Alper
a66b0e83f3
added support for half-open peers in KnownSwarm() function
2017-09-16 11:48:16 +01:00
Matt Joiner
b3137b1ede
Make type piece public
2017-09-15 19:35:16 +10:00
Matt Joiner
2aa20b3e22
Don't verify data at startup, add Torrent.Piece.VerifyData and Torrent.VerifyData for this purpose
...
This has the side effect of deflaking a lot of tests that race to verify data when a torrent is added.
2017-09-15 19:22:32 +10:00
Matt Joiner
b39df82fbc
Include peer data with half open connections
2017-09-15 19:10:09 +10:00
Bora M. Alper
f87b732959
added the initial version of the (t *Torrent) KnownSwarm() function
2017-09-12 15:22:53 +01:00
Matt Joiner
bad6f07f5e
Wrap writerCond in tickleWriter and be more selective about using it
2017-09-01 15:26:50 +10:00
Matt Joiner
13e79039f2
Generate requests, cancels and interest state in the connection writer
2017-08-31 23:48:52 +10:00
Matt Joiner
0388ec1eee
Synchronize Torrent.Info
2017-08-29 15:16:53 +10:00
Matt Joiner
a8a1ea755d
Remove unused functions
2017-08-26 13:23:04 +10:00
Matt Joiner
76c60ffa77
Try a state-delta function for updating request state
...
Also adds Torrent.networkingEnabled, though it isn't yet useful.
2017-08-18 01:51:02 +10:00
Matt Joiner
493916c279
Rename Torrent.connHasWantedPieces->connection.peerHasWantedPieces
2017-08-18 01:48:19 +10:00
Matt Joiner
824441efa0
Move logging inside client lock, for Torrent.String
...
Fixes #163
2017-07-01 16:01:38 +10:00
mlmhl
a3d231cb92
signal an event when torrent closed
2017-06-05 08:46:50 +08:00
Matt Joiner
296ef76c36
Tidy up the duplicate conn selection code
2017-05-26 13:00:28 +10:00
Matt Joiner
5bde8de95d
perf.Timer.Stop renamed
2017-05-26 13:00:28 +10:00
luffyma(马林)
d8023a5e39
bug fix: race condition between outgoing connection and incoming connection
2017-05-10 18:31:19 +08:00
Joe Lanford
0d19c72ea5
Added peer count stats to TorrentStats struct
2017-04-22 23:29:10 -04:00
Matt Joiner
ba3e798b5f
Fix a logging of metainfo.Hash
2017-02-24 21:56:23 +11:00
Matt Joiner
aa74d992d3
Don’t track the empty string, and ditch Torrent.announceList
2017-02-19 15:57:30 +11:00
Matt Joiner
350dd01ab9
Fix torrent status info hash hex
2017-02-16 20:10:32 +11:00
Matt Joiner
a959bdd0f8
Revert "Quick fix for missing MetaInfo.Announce everywhere with trackers"
...
This reverts commit b7a8d08bbf
.
2017-02-15 18:40:30 +11:00
Matt Joiner
b7a8d08bbf
Quick fix for missing MetaInfo.Announce everywhere with trackers
2017-02-13 22:28:42 +11:00
Matt Joiner
b868a6b9e2
dht.Server.Announce now takes [20]byte
2017-02-07 15:01:02 +11:00
Matt Joiner
79d800fe92
Trivial logging, comment, Stringer changes
2017-02-02 16:53:19 +11:00
Matt Joiner
55b6025f80
Log the storage TorrentImpl type
2017-01-04 18:15:49 +11:00
Matt Joiner
9cf09dba8a
Remove unused funcs and idents
2017-01-01 11:03:02 +11:00
Matt Joiner
186b5073d2
Move method queuePieceCheck
2017-01-01 11:02:37 +11:00
Matt Joiner
d48c7c8e36
sort imports
2017-01-01 11:01:41 +11:00
Matt Joiner
b68d7cd08e
dht/… moved to github.com/anacrolix/dht
2016-12-14 11:43:37 +11:00
Matt Joiner
f510c5cf22
Fix piece failures not clearing dirty chunks
...
I don’t like how complicated piece completion/hashing management is, but it works.
2016-12-06 16:10:10 +11:00
Matt Joiner
af7a0d3464
Add Torrent.Closed
2016-11-30 18:02:39 +11:00
Matt Joiner
1f2f037209
Fix logging of trust slice
2016-11-30 18:01:39 +11:00
Matt Joiner
f451a39b69
Fix harmless race conditions in Client.WriteStatus introduced way back
2016-11-27 14:26:45 +11:00
Matt Joiner
4a7fbf6170
Add peers received from received announce_peer DHT messages to the Client
...
Addresses #133
2016-11-27 00:05:19 +11:00
Matt Joiner
fdf75d59c8
Kick only the worst connection when a piece fails a check
2016-11-23 12:59:23 +11:00
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
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
Matt Joiner
ced5733c88
Improve uploading/seeding
2015-06-16 16:57:47 +10:00
Matt Joiner
af127dfd0f
Add some metainfo validation
2015-06-03 00:17:58 +10:00
Matt Joiner
a2df9f8b01
Miscellaneous changes
2015-06-03 00:03:43 +10:00
Matt Joiner
21fb4933fc
Change the way piece state is exposed to give more detail
2015-06-01 18:22:12 +10:00
Matt Joiner
1cf591dc3d
Switch to using a slice for tracking pending chunks. Saves massive amounts of memory.
2015-05-16 10:51:48 +10:00
Matt Joiner
0863f8ba2c
go vet
2015-05-15 08:41:42 +10:00
Matt Joiner
0ec0302d1c
Publicly expose Torrent.GotInfo
2015-04-28 15:24:17 +10:00
Matt Joiner
526d9d738e
Rewrite imports to local bencode and metainfo
2015-04-27 14:55:01 +10:00
Matt Joiner
28b299e7c8
Rework the Torrent Reader interface, to allow reader options, and add "responsive" as one such option
...
Had several weeks of testing. Removes a lot of the "helper" reading methods, but this was necessary to allow per-Torrent reading options.
2015-04-14 23:59:41 +10:00
Matt Joiner
ade6087b2f
Move torrentOffsetRequest and torrentRequestOffset, fixing a bug in former, and test it
2015-04-08 02:20:01 +10:00
Matt Joiner
60d8ea75a2
Prevent bad metadata_size in extended handshakes from stalling completion of metadata
...
Occasionally bad peers send ridiculous or incorrect metadata_size in their handshakes. If the first acceptable size is wrong, and too small, we'll keep failing metadata completion. If it's too large, honest peers will never send us the pieces we're asking for and we'll never complete the metadata. Now we just adjust the expected metadata size, and keep retrying until we finish. Additionally, we can now request metadata after sending initial messages.
2015-03-27 15:36:59 +11:00
Matt Joiner
3aa78763aa
Use rogpeppe's sortimports to fix this goimports ordering madness
2015-03-26 17:18:08 +11:00
Matt Joiner
87690e4c4c
Show metadata state in status output
...
This is help verify the cause for an occasional stall obtaining metadata from peers.
2015-03-25 15:50:31 +11:00
Matt Joiner
03e69c5464
Fix crash from bad metadata_size in extended handshake
2015-03-24 16:47:02 +11:00
Matt Joiner
67f90ed886
More public interface tidying
2015-03-20 23:52:53 +11:00
Matt Joiner
842a32ae0c
Rewrite import paths for migration from Bitbucket
2015-03-20 16:37:44 +11:00
Matt Joiner
0c63952353
More cleaning up of public interface
2015-03-20 10:52:01 +11:00
Matt Joiner
a07eb8d720
Misc, some encryption related
2015-03-18 18:37:26 +11:00
Matt Joiner
28455fb817
Speed up stuff relating to checking piece completion
2015-03-18 18:34:35 +11:00
Matt Joiner
29238ff23f
Change the interface to add torrents to a Client
2015-03-18 18:32:31 +11:00
Matt Joiner
a7dddd9be6
Rewrite handshaking and connection management
2015-03-18 18:28:13 +11:00
Matt Joiner
203da0aab0
Tidy up extension bytes handling; don't close conn from handshake writer; force protocol encryption for now
2015-03-13 06:21:13 +11:00
Matt Joiner
e85b7e228b
Add support for Fast Extension
2015-03-12 20:06:23 +11:00
Matt Joiner
e6fbde0dc6
Rework piece completion
2015-03-11 02:41:21 +11:00
Matt Joiner
914bc12bb6
Harmless improvements
2015-03-11 02:39:01 +11:00
Matt Joiner
d7695c4585
Change torrent.Name()
2015-03-09 17:35:29 +11:00
Matt Joiner
ad6ac3f2cd
More cleaning of public interface
2015-03-08 17:28:14 +11:00
Matt Joiner
3e753bb8ad
Change up the data storage interfaces a bit
2015-03-07 17:11:45 +11:00
Matt Joiner
779f4d3b97
Implement Handle.ReadAt
2015-03-04 13:06:33 +11:00
Matt Joiner
4eb70e0673
Support opening handles to Torrent and File
2015-03-01 14:32:54 +11:00
Matt Joiner
a2d69b4931
Make blob data stateful
2015-02-27 12:45:55 +11:00
Matt Joiner
315c703456
Rename TorrentData->Data
2015-02-27 01:43:37 +11:00
Matt Joiner
22746dda23
Ditch the intermediate MetaInfo type
2015-02-26 22:17:58 +11:00
Matt Joiner
c75dbccea3
Hide a whole bunch of functions seen via torrent
2015-02-25 15:42:47 +11:00
Matt Joiner
0eb418360b
Allow configuring Client torrent data opener, config dir, disabling metainfo cache, and prune with a timer instead of goroutine
2015-02-25 14:48:39 +11:00
Matt Joiner
9fb7934d0c
Comments
2015-02-25 01:34:57 +11:00
Matt Joiner
4b1b009049
Encapsulate torrent data, and provide os.File and mmap-based implementations
2015-02-10 00:14:52 +11:00
Matt Joiner
029d6939f8
Hide some methods that shouldn't be public
2015-02-10 00:12:29 +11:00
Matt Joiner
4ca6b4e2c7
Fix some stuff Rob Clifford broke through stress testing
2015-02-06 14:54:59 +11:00
Matt Joiner
89fc37d46f
Expose PieceStatusCharSequence
2015-01-26 20:52:59 +11:00
Matt Joiner
78caa4533b
Scale readahead with unchoked connections
2015-01-11 00:16:57 +11:00
Matt Joiner
d54c5ddf24
Remove a bunch of dead code
2014-12-28 12:51:09 +11:00
Matt Joiner
3a221dc57d
Rip out the pieces by bytes left and responsive download strategy stuff
2014-12-26 17:15:17 +11:00
Matt Joiner
262f045fd1
Fixes due to not pending chunk specs prematurely
2014-12-09 00:22:05 -06:00
Matt Joiner
a081ad63d9
Save memory by not pending chunks prematurely
2014-12-08 21:57:13 -06:00
Matt Joiner
bacb1af357
Write piece status as counts of contiguous identical states
2014-12-06 21:16:02 -06:00
Matt Joiner
b6ae4caa6a
Set priorities ahead of the current read position
2014-12-05 00:56:28 -06:00
Matt Joiner
ac1afa19b8
mmap_span: Avoid allocating the span slice on every use
2014-12-05 00:54:55 -06:00
Matt Joiner
91c2c1f5c7
Piece priorities, torrent read interface and many fixes
2014-12-03 01:07:50 -06:00
Matt Joiner
a87e753572
When metadata arrives, we also need to init request ordering
2014-12-02 18:42:22 -06:00
Matt Joiner
c41919807e
Reuse the info bytes when marshalling torrent metainfo
2014-12-01 23:33:38 -06:00
Matt Joiner
5c8de6dd7c
Skip mapping files with length 0
2014-12-01 19:13:08 -06:00
Matt Joiner
c7283182b6
Trivial
2014-12-01 16:40:18 -06:00
Matt Joiner
fb2b626175
Don't send constructed MetaInfo down a channel when it's available, build it on demand
2014-12-01 16:37:40 -06:00
Matt Joiner
cb75f49bf7
torrent.String, if the name isn't available, use the info hash
2014-12-01 14:29:30 -06:00
Matt Joiner
db0232e03f
Not ever hashed takes higher priority than partially downloaded
2014-12-01 03:28:25 -06:00
Matt Joiner
06aff91f8c
Don't open new connections or announce when new connections aren't wanted
2014-11-21 00:09:55 -06:00
Matt Joiner
9c37205dde
Include trackers in WriteStatus
2014-11-21 00:07:42 -06:00
Matt Joiner
06e240e198
Expose a wrapped metainfo type with helper methods
2014-11-18 14:36:27 -06:00
Matt Joiner
e37d369864
Move half-open tracking into per-torrent
2014-11-16 13:30:44 -06:00
Matt Joiner
ecf2639856
Add magnet-metainfo, tool to download magnet to torrent file
2014-09-25 18:05:52 +10:00
Matt Joiner
e30f2777fc
Missing torrent functions
2014-09-14 04:06:17 +10:00
Matt Joiner
97ae59dfaf
Improve the data waiter system
2014-09-14 03:50:15 +10:00
Matt Joiner
0217bc6163
Improvements to written status
2014-09-14 03:43:11 +10:00
Matt Joiner
dcc3de7a70
New worst conn algorithm that incorporates useful/unwanted chunk download rates
2014-09-14 03:40:35 +10:00
Matt Joiner
ced8a7b78f
New worst conns algorithm that takes into account connection useful chunk hit rate
2014-09-11 20:31:31 +10:00
Matt Joiner
ed08bd2837
Introduce socket/torrent limits, work in progress
2014-08-28 10:06:36 +10:00
Matt Joiner
c33b889b5e
Cease networking on a torrent if it's finished and we're not going to seed
2014-08-28 09:39:27 +10:00
Matt Joiner
7dd932bd5a
Fix a few crashes
2014-08-25 22:15:45 +10:00
Matt Joiner
2d9c22ae1e
Misc trivial improvements
2014-08-25 22:14:10 +10:00
Matt Joiner
6aa459dc0d
Stop announcing on DHT if a torrent is removed
2014-08-25 06:01:05 +10:00
Matt Joiner
c8f335182f
Improve incomplete piece ordering, responsive download strategy
2014-08-25 05:31:34 +10:00
Matt Joiner
6dce2cbf76
Add piece length to torrent status
2014-08-24 03:11:35 +10:00
Matt Joiner
ed8ee625c9
Optimize torrent.Length()
2014-08-24 03:09:02 +10:00
Matt Joiner
95d5d4a30c
Improve status and logging
2014-08-22 17:33:17 +10:00
Matt Joiner
2410c3eddd
Extract function generating all chunk specs for a piece
2014-08-22 03:42:38 +10:00
Matt Joiner
00a4e9bc11
Fix crash in metadata requests beyond available info bytes
2014-08-22 03:42:00 +10:00
Matt Joiner
e8f184a7bf
Store pending peers in a dict to prevent duplicates
2014-08-21 21:10:19 +10:00
Matt Joiner
74f05db2ea
Clean up imports
2014-08-21 21:08:56 +10:00
Matt Joiner
5c1492bffe
Add CopyExact util function
2014-08-21 18:24:19 +10:00
Matt Joiner
ef7c4f4120
Move priority management entirely into the download strategies
2014-07-24 13:42:31 +10:00
Matt Joiner
6158b1f6ec
torrentfs: Match the active torrents to those found in the given directory
2014-07-23 01:54:11 +10:00
Matt Joiner
b30f3ba73e
Correct the connection peer bitfields when the metadata becomes available
2014-07-16 17:09:30 +10:00
Matt Joiner
8910eb660d
Add more information I've needed to the status page
2014-07-16 17:07:28 +10:00
Matt Joiner
0d27ae7fd1
Make the discovery source for a connection more descriptive
2014-07-16 17:06:18 +10:00
Matt Joiner
9e8a72ff1d
Invalidating metadata would cause a crash when metadata pieces kept arriving
2014-07-14 23:12:52 +10:00
Matt Joiner
4c2d07337d
Keep pieces sorted by bytes left
2014-07-10 00:26:58 +10:00
Matt Joiner
51431c7cfc
Some minor tweaks
2014-06-29 19:10:59 +10:00
Matt Joiner
f3bd288dd6
Fix crash writing torrent status before priorities are initialized
2014-06-29 19:08:46 +10:00
Matt Joiner
c96293a111
Can now download from magnet links
2014-06-28 19:38:31 +10:00
Matt Joiner
9d53e19547
Fixes for cmd/torrent with the new torrent.Info field
2014-06-27 18:57:35 +10:00
Matt Joiner
49e71f9654
Begin adding magnet and ut_metadata support
2014-06-27 00:57:07 +10:00
Matt Joiner
cf31465904
torrentfs: Write client status to HTTP port
2014-06-26 17:29:12 +10:00
Matt Joiner
26116a7df8
Shuffle chunk spec request order for readahead pieces
...
Should reduce overlap in received chunks.
2014-05-29 01:32:34 +10:00
Matt Joiner
898c4f4e4f
Store request heat in the download strategy
...
This avoids recalculating it for every FillRequest
2014-05-23 21:01:05 +10:00
Matt Joiner
a3bf8424a1
torrent.go: Alias peer_protocol as pp
2014-05-23 20:58:11 +10:00
Matt Joiner
65fa317244
Some minor fiddling to announcing in the client
2014-05-23 00:35:24 +10:00
Matt Joiner
96f85be99a
ResponsiveDownloadStrategy will readahead blocks
...
Test peers don't play well with short "up request" buffers, so we need to fill
these with the most likely blocks to achieve maximum download speeds.
2014-05-23 00:33:07 +10:00
Matt Joiner
ec77cb0ece
Misc minor improvements
2014-05-21 17:42:06 +10:00
Matt Joiner
04879b0002
Add Client.DownloadStrategy; fix priority of incomplete pieces
2014-05-21 17:40:54 +10:00
Matt Joiner
0f3c4cb3ec
Add some String methods and contextual information in log messages
2014-05-21 00:52:49 +10:00
Matt Joiner
0dee5d9952
Make Request private
2014-04-16 21:13:44 +10:00
Matt Joiner
1aa1063863
Big visibility/doc clean-up, and extract mmap_span package
2014-04-09 02:36:05 +10:00
Matt Joiner
786952e4cd
Add error handling to PrioritizeDataRegion as it's public facing API
2014-04-09 01:15:39 +10:00
Matt Joiner
a0a715c6f6
Fix calculation of request for torrent data offset
2014-04-08 16:45:33 +10:00
Matt Joiner
9ba3af19ba
Break up client.go into several files and a few fixes
...
Suppress expected errors when initiating connections.
Add an explicit timeout to initiate connections.
Put a lock on closing a connection to prevent data race warnings.
2014-04-03 23:16:59 +11:00