mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-03-31 17:55:36 +00:00
Merge pull request #103 from greatest-ape/work-2022-11-01
improve udp bandwidth statistics, improve changelog
This commit is contained in:
commit
e45a20cb30
2 changed files with 94 additions and 30 deletions
82
CHANGELOG.md
82
CHANGELOG.md
|
|
@ -4,42 +4,78 @@
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
#### General
|
||||||
|
|
||||||
* Add cli flag for printing parsed config
|
* Add cli flag for printing parsed config
|
||||||
* Add `aquatic_http_private`, an experiment for integrating with private trackers
|
* Add `aquatic_http_private`, an experiment for integrating with private trackers
|
||||||
* _aquatic_udp_: implement optional response resend buffer
|
|
||||||
* _aquatic_udp_: add optional extended statistics
|
#### aquatic_udp
|
||||||
* _aquatic_udp_: add Dockerfile to make it easier to get started
|
|
||||||
* _aquatic_ws_: add HTTP health check route when running without TLS
|
* Add optional response resend buffer for use on on operating systems that
|
||||||
|
don't buffer outgoing UDP traffic
|
||||||
|
* Add optional extended statistics
|
||||||
|
* Add Dockerfile to make it easier to get started
|
||||||
|
|
||||||
|
#### aquatic_ws
|
||||||
|
|
||||||
|
* Add HTTP health check route when running without TLS
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
#### General
|
||||||
|
|
||||||
* Rename request workers to swarm workers
|
* Rename request workers to swarm workers
|
||||||
* Switch to thin LTO for faster compile times
|
* Switch to thin LTO for faster compile times
|
||||||
* Use proper workspace path declarations and remove workspace patch section
|
* Use proper workspace path declarations instead of workspace patch section
|
||||||
* Use [Rust 1.64 workspace inheritance](https://blog.rust-lang.org/2022/09/22/Rust-1.64.0.html)
|
* Use [Rust 1.64 workspace inheritance](https://blog.rust-lang.org/2022/09/22/Rust-1.64.0.html)
|
||||||
* Reduce space taken by ValidUntil struct from 128 to 32 bits, reducing memory
|
* Reduce space taken by ValidUntil struct from 128 to 32 bits, reducing memory
|
||||||
consumtion for each stored peer by same amount
|
consumption for each stored peer by same amount
|
||||||
* Use regular (non-amortized) IndexMap for peer and pending scrape response maps (but not for torrent maps)
|
* Use regular (non-amortized) IndexMap for peer and pending scrape response
|
||||||
|
maps (but not for torrent maps)
|
||||||
* Improve privilege dropping
|
* Improve privilege dropping
|
||||||
* Quit whole program if any thread panics
|
* Quit whole program if any thread panics
|
||||||
* Update dependencies
|
* Update dependencies
|
||||||
* _aquatic_udp_: replace ConnectionMap with BLAKE3-based connection validator,
|
|
||||||
greatly decreasing memory consumtion
|
#### aquatic_udp
|
||||||
* _aquatic_udp_: don't return any response peers if announce event is stopped
|
|
||||||
* _aquatic_udp_: ignore requests with source port value of zero
|
* Replace ConnectionMap with BLAKE3-based connection validator, greatly
|
||||||
* _aquatic_http_: don't return any response peers if announce event is stopped
|
decreasing memory consumtion
|
||||||
* _aquatic_ws_: reduce size of various structs
|
* Don't return any response peers if announce event is stopped
|
||||||
* _aquatic_ws_: make TLS optional
|
* Ignore requests with source port value of zero
|
||||||
* _aquatic_ws_: support reverse proxies
|
|
||||||
|
#### aquatic_http
|
||||||
|
|
||||||
|
* Don't return any response peers if announce event is stopped
|
||||||
|
|
||||||
|
#### aquatic_ws
|
||||||
|
|
||||||
|
* Make TLS optional
|
||||||
|
* Support reverse proxies
|
||||||
|
* Reduce size of various structs
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
#### General
|
||||||
|
|
||||||
* Forbid unrecognized keys when parsing config files
|
* Forbid unrecognized keys when parsing config files
|
||||||
* Fix warnings from invalid avx512 key included in `./scripts/env-native-cpu-without-avx-512`
|
* Stop including invalid avx512 key in `./scripts/env-native-cpu-without-avx-512`
|
||||||
* _aquatic_http_protocol_: explicity check for /scrape path
|
|
||||||
* _aquatic_http_protocol_: return NeedMoreData until headers are fully parsed
|
#### aquatic_udp
|
||||||
* _aquatic_http_protocol_: fix issues with ScrapeRequest::write and AnnounceRequest::write
|
|
||||||
* _aquatic_http_protocol_: expose write and parse methods for subtypes
|
* When calculating bandwidth statistics, include size of protocol headers
|
||||||
* _aquatic_http_load_test_: exclusively use TLS 1.3
|
|
||||||
* _aquatic_ws_: remove peer from swarms immediately when connection is closed
|
#### aquatic_http_protocol
|
||||||
* _aquatic_ws_: allow peers to use multiple peer IDs, as long as they only use one per info hash
|
|
||||||
|
* Explicity check for /scrape path
|
||||||
|
* Return NeedMoreData until headers are fully parsed
|
||||||
|
* Fix issues with ScrapeRequest::write and AnnounceRequest::write
|
||||||
|
* Expose write and parse methods for subtypes
|
||||||
|
|
||||||
|
#### aquatic_http_load_test
|
||||||
|
|
||||||
|
* Exclusively use TLS 1.3
|
||||||
|
|
||||||
|
#### aquatic_ws
|
||||||
|
|
||||||
|
* Remove peer from swarms immediately when connection is closed
|
||||||
|
* Allow peers to use multiple peer IDs, as long as they only use one per info hash
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,24 @@ use crate::config::Config;
|
||||||
use storage::PendingScrapeResponseSlab;
|
use storage::PendingScrapeResponseSlab;
|
||||||
use validator::ConnectionValidator;
|
use validator::ConnectionValidator;
|
||||||
|
|
||||||
|
/// Bytes of data transmitted when sending an IPv4 UDP packet, in addition to payload size
|
||||||
|
///
|
||||||
|
/// Consists of:
|
||||||
|
/// - 8 bit ethernet frame
|
||||||
|
/// - 14 + 4 bit MAC header and checksum
|
||||||
|
/// - 20 bit IPv4 header
|
||||||
|
/// - 8 bit udp header
|
||||||
|
const EXTRA_PACKET_SIZE_IPV4: usize = 8 + 18 + 20 + 8;
|
||||||
|
|
||||||
|
/// Bytes of data transmitted when sending an IPv4 UDP packet, in addition to payload size
|
||||||
|
///
|
||||||
|
/// Consists of:
|
||||||
|
/// - 8 bit ethernet frame
|
||||||
|
/// - 14 + 4 bit MAC header and checksum
|
||||||
|
/// - 40 bit IPv6 header
|
||||||
|
/// - 8 bit udp header
|
||||||
|
const EXTRA_PACKET_SIZE_IPV6: usize = 8 + 18 + 40 + 8;
|
||||||
|
|
||||||
pub struct SocketWorker {
|
pub struct SocketWorker {
|
||||||
config: Config,
|
config: Config,
|
||||||
shared_state: State,
|
shared_state: State,
|
||||||
|
|
@ -241,12 +259,12 @@ impl SocketWorker {
|
||||||
if request_parsable {
|
if request_parsable {
|
||||||
requests_received_ipv4 += 1;
|
requests_received_ipv4 += 1;
|
||||||
}
|
}
|
||||||
bytes_received_ipv4 += bytes_read;
|
bytes_received_ipv4 += bytes_read + EXTRA_PACKET_SIZE_IPV4;
|
||||||
} else {
|
} else {
|
||||||
if request_parsable {
|
if request_parsable {
|
||||||
requests_received_ipv6 += 1;
|
requests_received_ipv6 += 1;
|
||||||
}
|
}
|
||||||
bytes_received_ipv6 += bytes_read;
|
bytes_received_ipv6 += bytes_read + EXTRA_PACKET_SIZE_IPV6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(err) if err.kind() == ErrorKind::WouldBlock => {
|
Err(err) if err.kind() == ErrorKind::WouldBlock => {
|
||||||
|
|
@ -379,12 +397,22 @@ impl SocketWorker {
|
||||||
match socket.send_to(&cursor.get_ref()[..bytes_written], addr) {
|
match socket.send_to(&cursor.get_ref()[..bytes_written], addr) {
|
||||||
Ok(amt) if config.statistics.active() => {
|
Ok(amt) if config.statistics.active() => {
|
||||||
let stats = if canonical_addr.is_ipv4() {
|
let stats = if canonical_addr.is_ipv4() {
|
||||||
&shared_state.statistics_ipv4
|
let stats = &shared_state.statistics_ipv4;
|
||||||
} else {
|
|
||||||
&shared_state.statistics_ipv6
|
|
||||||
};
|
|
||||||
|
|
||||||
stats.bytes_sent.fetch_add(amt, Ordering::Relaxed);
|
stats
|
||||||
|
.bytes_sent
|
||||||
|
.fetch_add(amt + EXTRA_PACKET_SIZE_IPV4, Ordering::Relaxed);
|
||||||
|
|
||||||
|
stats
|
||||||
|
} else {
|
||||||
|
let stats = &shared_state.statistics_ipv6;
|
||||||
|
|
||||||
|
stats
|
||||||
|
.bytes_sent
|
||||||
|
.fetch_add(amt + EXTRA_PACKET_SIZE_IPV6, Ordering::Relaxed);
|
||||||
|
|
||||||
|
stats
|
||||||
|
};
|
||||||
|
|
||||||
match response {
|
match response {
|
||||||
Response::Connect(_) => {
|
Response::Connect(_) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue