From 65a8c9d6ff67863a6f734ffbc096aa5a73d86da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 11:40:43 +0200 Subject: [PATCH 1/9] Use Rust 1.64 workspace inheritance --- CHANGELOG.md | 1 + Cargo.toml | 21 ++++++++++++++++++++- aquatic/Cargo.toml | 21 +++++++++++---------- aquatic_common/Cargo.toml | 15 ++++++++------- aquatic_http/Cargo.toml | 19 ++++++++++--------- aquatic_http_load_test/Cargo.toml | 19 ++++++++++--------- aquatic_http_private/Cargo.toml | 18 ++++++++++-------- aquatic_http_protocol/Cargo.toml | 13 +++++++------ aquatic_toml_config/Cargo.toml | 15 ++++++++------- aquatic_toml_config_derive/Cargo.toml | 13 +++++++------ aquatic_udp/Cargo.toml | 20 ++++++++++---------- aquatic_udp_bench/Cargo.toml | 21 +++++++++++---------- aquatic_udp_load_test/Cargo.toml | 19 ++++++++++--------- aquatic_udp_protocol/Cargo.toml | 13 +++++++------ aquatic_ws/Cargo.toml | 19 ++++++++++--------- aquatic_ws_load_test/Cargo.toml | 19 ++++++++++--------- aquatic_ws_protocol/Cargo.toml | 13 +++++++------ 17 files changed, 157 insertions(+), 122 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1beba05..0ad37e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * Rename request workers to swarm workers * Switch to thin LTO * Use proper workspace path declarations and remove workspace patch section +* 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 * Use regular (non-amortized) IndexMap for peer and pending scrape response maps (but not for torrent maps) * Improve privilege dropping diff --git a/Cargo.toml b/Cargo.toml index 0a7239c..e081fbd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,4 @@ [workspace] - members = [ "aquatic", "aquatic_common", @@ -18,6 +17,26 @@ members = [ "aquatic_ws_protocol", ] +[workspace.package] +version = "0.2.0" +authors = ["Joakim Frostegård "] +edition = "2021" +license = "Apache-2.0" +repository = "https://github.com/greatest-ape/aquatic" +readme = "./README.md" +rust-version = "1.64" + +[workspace.dependencies] +aquatic_common = { version = "0.2.0", path = "./aquatic_common" } +aquatic_http_protocol = { version = "0.2.0", path = "./aquatic_http_protocol" } +aquatic_http = { version = "0.2.0", path = "./aquatic_http" } +aquatic_toml_config = { version = "0.2.0", path = "./aquatic_toml_config" } +aquatic_toml_config_derive = { version = "0.2.0", path = "./aquatic_toml_config_derive" } +aquatic_udp_protocol = { version = "0.2.0", path = "./aquatic_udp_protocol" } +aquatic_udp = { version = "0.2.0", path = "./aquatic_udp" } +aquatic_ws_protocol = { version = "0.2.0", path = "./aquatic_ws_protocol" } +aquatic_ws = { version = "0.2.0", path = "./aquatic_ws" } + [patch.crates-io] membarrier = { git = "https://github.com/glommer/membarrier-rs.git", branch = "issue-22" } diff --git a/aquatic/Cargo.toml b/aquatic/Cargo.toml index 266d415..e13d3e5 100644 --- a/aquatic/Cargo.toml +++ b/aquatic/Cargo.toml @@ -1,20 +1,21 @@ [package] name = "aquatic" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "High-performance open BitTorrent tracker (UDP, HTTP, WebTorrent)" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["bittorrent", "torrent", "webtorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [[bin]] name = "aquatic" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common" } -aquatic_http = { version = "0.2.0", path = "../aquatic_http" } -aquatic_udp = { version = "0.2.0", path = "../aquatic_udp" } -aquatic_ws = { version = "0.2.0", path = "../aquatic_ws" } +aquatic_common.workspace = true +aquatic_http.workspace = true +aquatic_udp.workspace = true +aquatic_ws.workspace = true mimalloc = { version = "0.1", default-features = false } diff --git a/aquatic_common/Cargo.toml b/aquatic_common/Cargo.toml index 631c1fd..2b2fa5b 100644 --- a/aquatic_common/Cargo.toml +++ b/aquatic_common/Cargo.toml @@ -1,12 +1,13 @@ [package] name = "aquatic_common" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "aquatic BitTorrent tracker common code" -repository = "https://github.com/greatest-ape/aquatic" -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_common" @@ -15,7 +16,7 @@ name = "aquatic_common" rustls = ["dep:rustls", "rustls-pemfile"] [dependencies] -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } +aquatic_toml_config.workspace = true ahash = "0.8" anyhow = "1" diff --git a/aquatic_http/Cargo.toml b/aquatic_http/Cargo.toml index 385efaa..ae5a674 100644 --- a/aquatic_http/Cargo.toml +++ b/aquatic_http/Cargo.toml @@ -1,13 +1,14 @@ [package] name = "aquatic_http" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "High-performance open BitTorrent tracker (HTTP over TLS)" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["http", "server", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_http" @@ -16,9 +17,9 @@ name = "aquatic_http" name = "aquatic_http" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common", features = ["rustls", "glommio"] } -aquatic_http_protocol = { version = "0.2.0", path = "../aquatic_http_protocol" } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } +aquatic_common = { workspace = true, features = ["rustls", "glommio"] } +aquatic_http_protocol.workspace = true +aquatic_toml_config.workspace = true anyhow = "1" cfg-if = "1" diff --git a/aquatic_http_load_test/Cargo.toml b/aquatic_http_load_test/Cargo.toml index 30df0a6..540fec2 100644 --- a/aquatic_http_load_test/Cargo.toml +++ b/aquatic_http_load_test/Cargo.toml @@ -1,21 +1,22 @@ [package] name = "aquatic_http_load_test" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "BitTorrent (HTTP over TLS) load tester" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["http", "benchmark", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [[bin]] name = "aquatic_http_load_test" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common", features = ["glommio"] } -aquatic_http_protocol = { version = "0.2.0", path = "../aquatic_http_protocol" } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } +aquatic_common = { workspace = true, features = ["glommio"] } +aquatic_http_protocol.workspace = true +aquatic_toml_config.workspace = true anyhow = "1" futures-lite = "1" diff --git a/aquatic_http_private/Cargo.toml b/aquatic_http_private/Cargo.toml index 31b4d29..2bcde27 100644 --- a/aquatic_http_private/Cargo.toml +++ b/aquatic_http_private/Cargo.toml @@ -1,11 +1,13 @@ [package] name = "aquatic_http_private" -version = "0.2.0" -edition = "2021" -authors = ["Joakim Frostegård "] -license = "Apache-2.0" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["http", "benchmark", "peer-to-peer", "torrent", "bittorrent"] +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_http_private" @@ -14,9 +16,9 @@ name = "aquatic_http_private" name = "aquatic_http_private" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common", features = ["rustls"] } -aquatic_http_protocol = { version = "0.2.0", path = "../aquatic_http_protocol", features = ["axum"] } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } +aquatic_common = { workspace = true, features = ["rustls"] } +aquatic_http_protocol = { workspace = true, features = ["axum"] } +aquatic_toml_config.workspace = true anyhow = "1" axum = { version = "0.5", default-features = false, features = ["headers", "http1", "matched-path", "original-uri"] } diff --git a/aquatic_http_protocol/Cargo.toml b/aquatic_http_protocol/Cargo.toml index 467a36c..86a2f64 100644 --- a/aquatic_http_protocol/Cargo.toml +++ b/aquatic_http_protocol/Cargo.toml @@ -1,13 +1,14 @@ [package] name = "aquatic_http_protocol" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" -repository = "https://github.com/greatest-ape/aquatic" description = "HTTP BitTorrent tracker protocol" keywords = ["http", "protocol", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_http_protocol" diff --git a/aquatic_toml_config/Cargo.toml b/aquatic_toml_config/Cargo.toml index 9ac82ad..048d66c 100644 --- a/aquatic_toml_config/Cargo.toml +++ b/aquatic_toml_config/Cargo.toml @@ -1,20 +1,21 @@ [package] name = "aquatic_toml_config" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "Serialize toml with comments" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["toml"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_toml_config" [dependencies] toml = "0.5" -aquatic_toml_config_derive = { version = "0.2.0", path = "../aquatic_toml_config_derive" } +aquatic_toml_config_derive.workspace = true [dev-dependencies] serde = { version = "1.0", features = ["derive"] } diff --git a/aquatic_toml_config_derive/Cargo.toml b/aquatic_toml_config_derive/Cargo.toml index d66f3f8..951fe97 100644 --- a/aquatic_toml_config_derive/Cargo.toml +++ b/aquatic_toml_config_derive/Cargo.toml @@ -1,14 +1,15 @@ [package] name = "aquatic_toml_config_derive" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "Serialize toml with comments" -repository = "https://github.com/greatest-ape/aquatic" exclude = ["target"] keywords = ["toml"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] proc-macro = true diff --git a/aquatic_udp/Cargo.toml b/aquatic_udp/Cargo.toml index 8e9e2a2..840a5d8 100644 --- a/aquatic_udp/Cargo.toml +++ b/aquatic_udp/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "aquatic_udp" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "High-performance open UDP BitTorrent tracker" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["udp", "server", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" -rust-version = "1.62" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_udp" @@ -20,9 +20,9 @@ name = "aquatic_udp" cpu-pinning = ["aquatic_common/hwloc"] [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common" } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } -aquatic_udp_protocol = { version = "0.2.0", path = "../aquatic_udp_protocol" } +aquatic_common.workspace = true +aquatic_toml_config.workspace = true +aquatic_udp_protocol.workspace = true anyhow = "1" blake3 = "1" diff --git a/aquatic_udp_bench/Cargo.toml b/aquatic_udp_bench/Cargo.toml index d844f28..e9786d9 100644 --- a/aquatic_udp_bench/Cargo.toml +++ b/aquatic_udp_bench/Cargo.toml @@ -1,20 +1,21 @@ [package] name = "aquatic_udp_bench" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" -repository = "https://github.com/greatest-ape/aquatic" -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [[bin]] name = "aquatic_udp_bench" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common" } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } -aquatic_udp = { version = "0.2.0", path = "../aquatic_udp" } -aquatic_udp_protocol = { version = "0.2.0", path = "../aquatic_udp_protocol" } +aquatic_common.workspace = true +aquatic_toml_config.workspace = true +aquatic_udp.workspace = true +aquatic_udp_protocol.workspace = true anyhow = "1" crossbeam-channel = "0.5" diff --git a/aquatic_udp_load_test/Cargo.toml b/aquatic_udp_load_test/Cargo.toml index 62aa53a..2e4d23d 100644 --- a/aquatic_udp_load_test/Cargo.toml +++ b/aquatic_udp_load_test/Cargo.toml @@ -1,13 +1,14 @@ [package] name = "aquatic_udp_load_test" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "BitTorrent (UDP) load tester" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["udp", "benchmark", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [features] cpu-pinning = ["aquatic_common/hwloc"] @@ -16,9 +17,9 @@ cpu-pinning = ["aquatic_common/hwloc"] name = "aquatic_udp_load_test" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common" } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } -aquatic_udp_protocol = { version = "0.2.0", path = "../aquatic_udp_protocol" } +aquatic_common.workspace = true +aquatic_toml_config.workspace = true +aquatic_udp_protocol.workspace = true anyhow = "1" hashbrown = "0.12" diff --git a/aquatic_udp_protocol/Cargo.toml b/aquatic_udp_protocol/Cargo.toml index 9c99303..eb78d2b 100644 --- a/aquatic_udp_protocol/Cargo.toml +++ b/aquatic_udp_protocol/Cargo.toml @@ -1,13 +1,14 @@ [package] name = "aquatic_udp_protocol" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "UDP BitTorrent tracker protocol" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["udp", "protocol", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [dependencies] byteorder = "1" diff --git a/aquatic_ws/Cargo.toml b/aquatic_ws/Cargo.toml index 4ea8a6b..3cd73bd 100644 --- a/aquatic_ws/Cargo.toml +++ b/aquatic_ws/Cargo.toml @@ -1,13 +1,14 @@ [package] name = "aquatic_ws" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "High-performance open WebTorrent tracker" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["webtorrent", "websocket", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_ws" @@ -16,9 +17,9 @@ name = "aquatic_ws" name = "aquatic_ws" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common", features = ["rustls", "glommio"] } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } -aquatic_ws_protocol = { version = "0.2.0", path = "../aquatic_ws_protocol" } +aquatic_common = { workspace = true, features = ["rustls", "glommio"] } +aquatic_toml_config.workspace = true +aquatic_ws_protocol.workspace = true anyhow = "1" async-tungstenite = "0.17" diff --git a/aquatic_ws_load_test/Cargo.toml b/aquatic_ws_load_test/Cargo.toml index 39e5d4f..b123c89 100644 --- a/aquatic_ws_load_test/Cargo.toml +++ b/aquatic_ws_load_test/Cargo.toml @@ -1,21 +1,22 @@ [package] name = "aquatic_ws_load_test" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "WebTorrent over TLS load tester" -repository = "https://github.com/greatest-ape/aquatic" keywords = ["webtorrent", "websocket", "benchmark", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [[bin]] name = "aquatic_ws_load_test" [dependencies] -aquatic_common = { version = "0.2.0", path = "../aquatic_common", features = ["glommio"] } -aquatic_toml_config = { version = "0.2.0", path = "../aquatic_toml_config" } -aquatic_ws_protocol = { version = "0.2.0", path = "../aquatic_ws_protocol" } +aquatic_common = { workspace = true, features = ["glommio"] } +aquatic_toml_config.workspace = true +aquatic_ws_protocol.workspace = true anyhow = "1" async-tungstenite = "0.17" diff --git a/aquatic_ws_protocol/Cargo.toml b/aquatic_ws_protocol/Cargo.toml index 5ce41e1..0dbdd5f 100644 --- a/aquatic_ws_protocol/Cargo.toml +++ b/aquatic_ws_protocol/Cargo.toml @@ -1,14 +1,15 @@ [package] name = "aquatic_ws_protocol" -version = "0.2.0" -authors = ["Joakim Frostegård "] -edition = "2021" -license = "Apache-2.0" description = "WebTorrent tracker protocol" -repository = "https://github.com/greatest-ape/aquatic" exclude = ["target"] keywords = ["webtorrent", "protocol", "peer-to-peer", "torrent", "bittorrent"] -readme = "../README.md" +version.workspace = true +authors.workspace = true +edition.workspace = true +license.workspace = true +repository.workspace = true +readme.workspace = true +rust-version.workspace = true [lib] name = "aquatic_ws_protocol" From e5ffedc10c55119c38fcb3966aaae6002e780c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 11:44:13 +0200 Subject: [PATCH 2/9] Update CHANGELOG --- CHANGELOG.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ad37e7..9c471ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,15 +14,17 @@ ### Changed * Rename request workers to swarm workers -* Switch to thin LTO +* Switch to thin LTO for faster compile times * Use proper workspace path declarations and remove workspace patch section * 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 +* Reduce space taken by ValidUntil struct from 128 to 32 bits, reducing memory + consumtion for each stored peer by same amount * Use regular (non-amortized) IndexMap for peer and pending scrape response maps (but not for torrent maps) * Improve privilege dropping * Quit whole program if any thread panics * Update dependencies -* _aquatic_udp_: replace ConnectionMap with BLAKE3-based connection validator +* _aquatic_udp_: replace ConnectionMap with BLAKE3-based connection validator, + greatly decreasing memory consumtion * _aquatic_udp_: ignore requests with source port value of zero * _aquatic_ws_: reduce size of various structs * _aquatic_ws_: make TLS optional @@ -30,7 +32,7 @@ ### Fixed -* Fail on unrecognized config keys +* Forbid unrecognized keys when parsing config files * _aquatic_http_protocol_: explicity check for /scrape path * _aquatic_http_protocol_: return NeedMoreData until headers are fully parsed * _aquatic_http_protocol_: fix issues with ScrapeRequest::write and AnnounceRequest::write From ed98327e1ac47fe54b13f75682659d5f1300b337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 11:50:21 +0200 Subject: [PATCH 3/9] udp: if PeerStatus is Stopped, return empty peer list --- aquatic_udp/src/workers/swarm/mod.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/aquatic_udp/src/workers/swarm/mod.rs b/aquatic_udp/src/workers/swarm/mod.rs index d325bcd..bab716e 100644 --- a/aquatic_udp/src/workers/swarm/mod.rs +++ b/aquatic_udp/src/workers/swarm/mod.rs @@ -157,8 +157,11 @@ fn handle_announce_request( peer_valid_until, ); - let response_peers = - torrent_data.extract_response_peers(rng, request.peer_id, max_num_peers_to_take); + let response_peers = if let PeerStatus::Stopped = peer_status { + Vec::new() + } else { + torrent_data.extract_response_peers(rng, request.peer_id, max_num_peers_to_take) + }; AnnounceResponse { transaction_id: request.transaction_id, From 69c395a702ca479d30bb2fb283ca535fe3e5878b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 11:52:55 +0200 Subject: [PATCH 4/9] http: if PeerStatus is Stopped, return empty peer list --- aquatic_http/src/workers/swarm.rs | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/aquatic_http/src/workers/swarm.rs b/aquatic_http/src/workers/swarm.rs index 6e3c6c5..706275d 100644 --- a/aquatic_http/src/workers/swarm.rs +++ b/aquatic_http/src/workers/swarm.rs @@ -386,18 +386,22 @@ pub fn upsert_peer_and_get_response_peers( ::log::debug!("peer request numwant: {:?}", request.numwant); - let max_num_peers_to_take = match request.numwant { - Some(0) | None => config.protocol.max_peers, - Some(numwant) => numwant.min(config.protocol.max_peers), - }; + let response_peers = if let PeerStatus::Stopped = peer_status { + Vec::new() + } else { + let max_num_peers_to_take = match request.numwant { + Some(0) | None => config.protocol.max_peers, + Some(numwant) => numwant.min(config.protocol.max_peers), + }; - let response_peers: Vec> = extract_response_peers( - rng, - &torrent_data.peers, - max_num_peers_to_take, - peer_map_key, - Peer::to_response_peer, - ); + extract_response_peers( + rng, + &torrent_data.peers, + max_num_peers_to_take, + peer_map_key, + Peer::to_response_peer, + ) + }; ( torrent_data.num_seeders, From 0945e1dc6e99ba2a5ef0dec886f0c7f44c82cff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 11:54:36 +0200 Subject: [PATCH 5/9] http: remove some ::log::debug statements --- aquatic_http/src/workers/socket.rs | 4 ---- aquatic_http/src/workers/swarm.rs | 8 -------- 2 files changed, 12 deletions(-) diff --git a/aquatic_http/src/workers/socket.rs b/aquatic_http/src/workers/socket.rs index d99062a..7c2e856 100644 --- a/aquatic_http/src/workers/socket.rs +++ b/aquatic_http/src/workers/socket.rs @@ -248,13 +248,9 @@ impl Connection { match Request::from_bytes(&self.request_buffer[..self.request_buffer_position]) { Ok(request) => { - ::log::debug!("received request: {:?}", request); - return Ok(Either::Right(request)); } Err(RequestParseError::Invalid(err)) => { - ::log::debug!("invalid request: {:?}", err); - let response = FailureResponse { failure_reason: "Invalid request".into(), }; diff --git a/aquatic_http/src/workers/swarm.rs b/aquatic_http/src/workers/swarm.rs index 706275d..e1b056d 100644 --- a/aquatic_http/src/workers/swarm.rs +++ b/aquatic_http/src/workers/swarm.rs @@ -344,8 +344,6 @@ pub fn upsert_peer_and_get_response_peers( valid_until, }; - ::log::debug!("peer: {:?}", peer); - let ip_or_key = request .key .map(Either::Right) @@ -356,8 +354,6 @@ pub fn upsert_peer_and_get_response_peers( ip_or_key, }; - ::log::debug!("peer map key: {:?}", peer_map_key); - let opt_removed_peer = match peer_status { PeerStatus::Leeching => { torrent_data.num_leechers += 1; @@ -372,8 +368,6 @@ pub fn upsert_peer_and_get_response_peers( PeerStatus::Stopped => torrent_data.peers.remove(&peer_map_key), }; - ::log::debug!("opt_removed_peer: {:?}", opt_removed_peer); - match opt_removed_peer.map(|peer| peer.status) { Some(PeerStatus::Leeching) => { torrent_data.num_leechers -= 1; @@ -384,8 +378,6 @@ pub fn upsert_peer_and_get_response_peers( _ => {} } - ::log::debug!("peer request numwant: {:?}", request.numwant); - let response_peers = if let PeerStatus::Stopped = peer_status { Vec::new() } else { From 6619445d7a7372fb8cad656920f713dd95270b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 11:58:20 +0200 Subject: [PATCH 6/9] Run cargo update Updating once_cell v1.14.0 -> v1.15.0 Updating proc-macro2 v1.0.43 -> v1.0.44 Updating serde v1.0.144 -> v1.0.145 Updating serde_derive v1.0.144 -> v1.0.145 Updating thiserror v1.0.35 -> v1.0.36 Updating thiserror-impl v1.0.35 -> v1.0.36 --- Cargo.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c060ac3..9718825 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1893,9 +1893,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "oorandom" @@ -2114,9 +2114,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58" dependencies = [ "unicode-ident", ] @@ -2369,9 +2369,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" dependencies = [ "serde_derive", ] @@ -2407,9 +2407,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.145" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", @@ -2761,18 +2761,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85" +checksum = "0a99cb8c4b9a8ef0e7907cd3b617cc8dc04d571c4e73c8ae403d80ac160bb122" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783" +checksum = "3a891860d3c8d66fec8e73ddb3765f90082374dbaaa833407b904a94f1a7eb43" dependencies = [ "proc-macro2", "quote", From ce9fdc3887eafa4ce4960011a0917cf75f410e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 12:03:47 +0200 Subject: [PATCH 7/9] Fix env-native-cpu-without-avx-512 issue --- scripts/env-native-cpu-without-avx-512 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/env-native-cpu-without-avx-512 b/scripts/env-native-cpu-without-avx-512 index 68f7751..8321fd7 100644 --- a/scripts/env-native-cpu-without-avx-512 +++ b/scripts/env-native-cpu-without-avx-512 @@ -3,7 +3,7 @@ # Compile with target-cpu=native but without AVX512 features, since they # decrease performance. -DISABLE_AVX512=$(rustc --print target-features | grep " avx512" | +DISABLE_AVX512=$(rustc --print target-features | grep " avx512" | grep -v "avx512fp16" | awk '{print $1}' | sed 's/^/-C target-feature=-/' | xargs) export RUSTFLAGS="-C target-cpu=native $DISABLE_AVX512" \ No newline at end of file From 47228a8d3c1cc585aa4ad2d79b2e58ea85f64afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 12:06:38 +0200 Subject: [PATCH 8/9] http: add debug statement on invalid requests --- aquatic_http/src/workers/socket.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aquatic_http/src/workers/socket.rs b/aquatic_http/src/workers/socket.rs index 7c2e856..927c53f 100644 --- a/aquatic_http/src/workers/socket.rs +++ b/aquatic_http/src/workers/socket.rs @@ -255,6 +255,8 @@ impl Connection { failure_reason: "Invalid request".into(), }; + ::log::debug!("Invalid request: {:#}", err); + return Ok(Either::Left(response)); } Err(RequestParseError::NeedMoreData) => { From 749add3fc81be548b609aafac2d80ec50abe5306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Sun, 25 Sep 2022 12:09:33 +0200 Subject: [PATCH 9/9] Update CHANGELOG --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c471ef..3310d1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,9 @@ * Update dependencies * _aquatic_udp_: replace ConnectionMap with BLAKE3-based connection validator, greatly decreasing memory consumtion +* _aquatic_udp_: don't return any response peers if announce event is stopped * _aquatic_udp_: ignore requests with source port value of zero +* _aquatic_http_: don't return any response peers if announce event is stopped * _aquatic_ws_: reduce size of various structs * _aquatic_ws_: make TLS optional * _aquatic_ws_: support reverse proxies @@ -33,6 +35,7 @@ ### Fixed * Forbid unrecognized keys when parsing config files +* Fix warnings from invalid avx512 key included 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_http_protocol_: fix issues with ScrapeRequest::write and AnnounceRequest::write