Commit graph

109 commits

Author SHA1 Message Date
Joakim Frostegård
ef10c4f366 WIP: aquatic http glommio 2021-10-26 17:29:21 +02:00
Joakim Frostegård
34bc4046b7 WIP: aquatic_http glommio impl 2021-10-26 16:26:37 +02:00
Joakim Frostegård
ad7e464788 aquatic_http: split into mio and glommio modules 2021-10-26 15:26:06 +02:00
Joakim Frostegård
38617c70f4 Refactor AccessList; update it periodically in aquatic_udp glommio 2021-10-19 22:52:31 +02:00
Joakim Frostegård
f3487d4749 Rename AccessList variants 2021-10-17 18:19:31 +02:00
Joakim Frostegård
3678e86654 Run rustfmt 2021-10-16 17:49:00 +02:00
Joakim Frostegård
48d49c9a1a aquatic_http: use cleaner request filtering by access list 2021-10-16 17:36:56 +02:00
Joakim Frostegård
7ccd5fcbf7 access lists: filter requests in socket workers instead 2021-10-16 17:26:40 +02:00
Joakim Frostegård
2e68155bf4 aquatic_http: use Cow<_> for FailureResponse.failure_reason 2021-10-16 00:19:58 +02:00
Joakim Frostegård
ddb1f394a1 aquatic_http: move torrent cleaning code to TorrentMaps impl 2021-10-15 23:13:26 +02:00
Joakim Frostegård
10fe014c03 aquatic_http access list: use in torrent cleaning, do periodic updates 2021-10-15 23:03:24 +02:00
Joakim Frostegård
7fec41099b aquatic_http: check access list in announce request handler 2021-10-15 22:49:07 +02:00
Joakim Frostegård
4fa199a1e0 aquatic_http access list: add config, state field, initial load 2021-10-15 22:38:58 +02:00
Joakim Frostegård
d172fc4f8c Upgrade socket2 2021-08-15 23:32:59 +02:00
Joakim Frostegård
32541c5c15 Upgrade hashbrown 2021-08-15 22:29:09 +02:00
Joakim Frostegård
d0e716f80b Run rustfmt, clean up aquatic_http_protocol/Cargo.toml 2021-08-15 22:26:11 +02:00
Joakim Frostegård
f9626ade57 Upgrade quickcheck to 1.0, adjust code, optimizing a slow test 2021-02-10 18:36:23 +01:00
Joakim Frostegård
e1260d14de Update rand to 0.8 and rand_distr to 0.4 2021-02-10 18:36:23 +01:00
Joakim Frostegård
bbc351bb59 Update privdrop to 0.5 2021-02-10 18:36:23 +01:00
Joakim Frostegård
ac6eefc30f Update crossbeam-channel to 0.5 2021-02-10 18:36:23 +01:00
Joakim Frostegård
fe11ed138a Use (patched) crates.io deps for crates, add some package metadata 2020-09-13 17:30:26 +02:00
Joakim Frostegård
66e9882f48 Update dependencies 2020-09-10 23:23:21 +02:00
Joakim Frostegård
8f72445b93 aquatic_http: fix debug log message for when TLS is established 2020-08-17 21:50:35 +02:00
Joakim Frostegård
4e0fc68548 aquatic http and ws: when cleaning torrents, update statistics 2020-08-16 23:24:44 +02:00
Joakim Frostegård
3d35bd9bd4 aquatic http and ws: raise default max peer and connection age
There was a problem with aquatic_http with clients announcing
less often than requested interval and getting purged, making
file transfers less reliable
2020-08-16 23:24:29 +02:00
Joakim Frostegård
6ee8ed4895 aquatic_common: extract response peers: don't return sender
Seems to fix or at least help with some issues with
real clients being slow to initiate transfers
2020-08-16 23:07:39 +02:00
Joakim Frostegård
b5452c2954 aquatic_http: debug-log responses in full 2020-08-16 21:15:05 +02:00
Joakim Frostegård
88423976c4 aquatic_http, aquatic_ws: add option for printing statistics
statistics are on number of peers per torrent
2020-08-13 03:58:28 +02:00
Joakim Frostegård
2b4cd2dea1 aquatic_http: support multiple request workers 2020-08-13 01:50:18 +02:00
Joakim Frostegård
9efc1fc66a add aquatic crate with master executable, refactor cli_helpers 2020-08-13 00:13:01 +02:00
Joakim Frostegård
cce7bd7150 aquatic_http: send responses for each event, use mio poll waker
This means
* less fluctuation in number of responses send per second
* longer poll timeouts can be used since poll is woken when
  responses are available for sending
* drain-like method used to fetch responses from response
  channel, meaning responses added while iterating won't
  be processed
2020-08-10 02:53:15 +02:00
Joakim Frostegård
d9282defbc aquatic_http: deregister connections before removing them 2020-08-09 02:30:40 +02:00
Joakim Frostegård
2893fffd20 aquatic_http: use const LISTENER_TOKEN for clarity 2020-08-09 00:44:39 +02:00
Joakim Frostegård
2d3761fee2 impl Copy for LogLevel, remove some cloning 2020-08-09 00:27:05 +02:00
Joakim Frostegård
8d58f8bb70 init logger in aquatic_cli_helpers crate 2020-08-02 21:21:58 +02:00
Joakim Frostegård
427c0bc7c3 aquatic_http: add keep_alive setting (default true)
This might be good for performance in the real world. It also
enables fairer load test comparisons with opentracker, which
in my understanding drops connections after sending responses.
2020-08-02 20:06:49 +02:00
Joakim Frostegård
c8b94adab5 aquatic_http: remove Connection.shutdown fn 2020-08-02 19:26:12 +02:00
Joakim Frostegård
cb3ec8cbf1 WIP: get http load test into better (but bad) state
Is now able to maintain correspondence with aquatic_http
and opentracker
2020-08-02 06:38:36 +02:00
Joakim Frostegård
e7de66603e aquatic_http: add upper limit on request read buffer 2020-08-02 02:45:56 +02:00
Joakim Frostegård
a3a1d1606b WIP: udp: add ipv6 support
Returning IPv6 peers doesn't really work with UDP. It is not supported by
https://libtorrent.org/udp_tracker_protocol.html. There is a suggestion in
https://web.archive.org/web/20170503181830/http://opentracker.blog.h3q.com/2007/12/28/the-ipv6-situation/
of using action number 4 and returning IPv6 octets just like for IPv4
addresses. Clients seem not to support it very well, but due to a lack of
alternative solutions, it is implemented here
2020-07-31 05:37:58 +02:00
Joakim Frostegård
fd68a5f603 aquatic_http: serialize responses to a buffer ref instead of new vec
This improves benchmark performance somewhat and performance
during load testing a bit too.
2020-07-24 21:59:23 +02:00
Joakim Frostegård
228511b3aa aquatic_http: replace flume with crossbeam; clean connections less often 2020-07-24 20:36:46 +02:00
Joakim Frostegård
f1f708465a remove aquatic_common_tcp crate, move contents into aquatic_http
It doesn't make a lot of sense to make a separate crate for
the few things here. I don't really want tight coupling between
the crates anyway, since it impedes making changes in them
and makes understanding them more difficult.
2020-07-21 23:01:34 +02:00
Joakim Frostegård
f2db4a43b9 Update lots of dependencies 2020-07-21 00:58:56 +02:00
Joakim Frostegård
95e25710dc aquatic_http: move request parsing into protocol crate 2020-07-20 20:13:56 +02:00
Joakim Frostegård
19ee41eb72 aquatic_http: config: set poll timeout in microseconds, default to 10000 2020-07-20 15:46:17 +02:00
Joakim Frostegård
4ac2012a2a aquatic_http: move protocol module to new crate aquatic_http_protocol 2020-07-19 21:59:31 +02:00
Joakim Frostegård
4caf174da5 aquatic_http: add criterion benchmark for announce response to bytes
Speedup of custom implementation compared to using bendy:

announce-response-to-bytes:

time:   [413.77 ns 415.34 ns 417.08 ns]
change: [-93.074% -93.021% -92.968%] (p = 0.00 < 0.01)
Performance has improved.
2020-07-19 16:56:13 +02:00
Joakim Frostegård
9df1f0ecc6 aquatic_http: rewrite request parsing, use smartstring
Use smartstring in PeerMapKey too.

Improves benchmark speed.

request-from-path:

time:   [2.1484 us 2.1530 us 2.1586 us]
change: [-24.246% -23.908% -23.570%] (p = 0.00 < 0.01)
Performance has improved.
2020-07-19 15:38:26 +02:00
Joakim Frostegård
fc9b4c8e0d aquatic_http: protocol: add test for scrape request parsing 2020-07-19 14:28:48 +02:00