diff --git a/TODO.md b/TODO.md index 0ebc8e5..98be979 100644 --- a/TODO.md +++ b/TODO.md @@ -17,8 +17,6 @@ * cargo-deny * aquatic_udp - * don't constantly recreate access list cache - * request worker: use `ValidUntil::new_with_now` * look at proper cpu pinning (check that one thread gets bound per core) * then consider so_attach_reuseport_cbpf * what poll event capacity is actually needed? diff --git a/aquatic_http/Cargo.toml b/aquatic_http/Cargo.toml index a4c0e20..fd6a1a5 100644 --- a/aquatic_http/Cargo.toml +++ b/aquatic_http/Cargo.toml @@ -9,11 +9,9 @@ repository = "https://github.com/greatest-ape/aquatic" [lib] name = "aquatic_http" -path = "src/lib/lib.rs" [[bin]] name = "aquatic_http" -path = "src/bin/main.rs" [features] cpu-pinning = ["aquatic_common/cpu-pinning"] diff --git a/aquatic_http/src/lib/common.rs b/aquatic_http/src/common.rs similarity index 100% rename from aquatic_http/src/lib/common.rs rename to aquatic_http/src/common.rs diff --git a/aquatic_http/src/lib/config.rs b/aquatic_http/src/config.rs similarity index 100% rename from aquatic_http/src/lib/config.rs rename to aquatic_http/src/config.rs diff --git a/aquatic_http/src/lib/lib.rs b/aquatic_http/src/lib.rs similarity index 96% rename from aquatic_http/src/lib/lib.rs rename to aquatic_http/src/lib.rs index 48ade1c..54ed266 100644 --- a/aquatic_http/src/lib/lib.rs +++ b/aquatic_http/src/lib.rs @@ -15,9 +15,8 @@ use std::{ use crate::config::Config; mod common; +mod workers; pub mod config; -mod handlers; -mod network; pub const APP_NAME: &str = "aquatic_http: HTTP/TLS BitTorrent tracker"; @@ -86,7 +85,7 @@ pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> { WorkerIndex::SocketWorker(i), ); - network::run_socket_worker( + workers::socket::run_socket_worker( config, state, tls_config, @@ -116,7 +115,7 @@ pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> { WorkerIndex::RequestWorker(i), ); - handlers::run_request_worker(config, state, request_mesh_builder, response_mesh_builder) + workers::request::run_request_worker(config, state, request_mesh_builder, response_mesh_builder) .await }); diff --git a/aquatic_http/src/bin/main.rs b/aquatic_http/src/main.rs similarity index 100% rename from aquatic_http/src/bin/main.rs rename to aquatic_http/src/main.rs diff --git a/aquatic_http/src/workers/mod.rs b/aquatic_http/src/workers/mod.rs new file mode 100644 index 0000000..5f41ab1 --- /dev/null +++ b/aquatic_http/src/workers/mod.rs @@ -0,0 +1,2 @@ +pub mod request; +pub mod socket; \ No newline at end of file diff --git a/aquatic_http/src/lib/handlers.rs b/aquatic_http/src/workers/request.rs similarity index 100% rename from aquatic_http/src/lib/handlers.rs rename to aquatic_http/src/workers/request.rs diff --git a/aquatic_http/src/lib/network.rs b/aquatic_http/src/workers/socket.rs similarity index 99% rename from aquatic_http/src/lib/network.rs rename to aquatic_http/src/workers/socket.rs index 51ed339..a3fb70b 100644 --- a/aquatic_http/src/lib/network.rs +++ b/aquatic_http/src/workers/socket.rs @@ -24,11 +24,9 @@ use glommio::timer::TimerActionRepeat; use glommio::{enclose, prelude::*}; use slab::Slab; -use crate::common::num_digits_in_usize; +use crate::common::*; use crate::config::Config; -use super::common::*; - const INTERMEDIATE_BUFFER_SIZE: usize = 1024; const MAX_REQUEST_SIZE: usize = 2048; diff --git a/aquatic_udp/Cargo.toml b/aquatic_udp/Cargo.toml index 58de6d2..da6c120 100644 --- a/aquatic_udp/Cargo.toml +++ b/aquatic_udp/Cargo.toml @@ -9,7 +9,6 @@ repository = "https://github.com/greatest-ape/aquatic" [lib] name = "aquatic_udp" -path = "src/lib/lib.rs" [[bin]] name = "aquatic_udp" diff --git a/aquatic_udp/src/lib/common.rs b/aquatic_udp/src/common.rs similarity index 100% rename from aquatic_udp/src/lib/common.rs rename to aquatic_udp/src/common.rs diff --git a/aquatic_udp/src/lib/config.rs b/aquatic_udp/src/config.rs similarity index 100% rename from aquatic_udp/src/lib/config.rs rename to aquatic_udp/src/config.rs diff --git a/aquatic_udp/src/lib/lib.rs b/aquatic_udp/src/lib.rs similarity index 100% rename from aquatic_udp/src/lib/lib.rs rename to aquatic_udp/src/lib.rs diff --git a/aquatic_udp/src/bin/aquatic_udp.rs b/aquatic_udp/src/main.rs similarity index 100% rename from aquatic_udp/src/bin/aquatic_udp.rs rename to aquatic_udp/src/main.rs diff --git a/aquatic_udp/src/lib/workers/mod.rs b/aquatic_udp/src/workers/mod.rs similarity index 100% rename from aquatic_udp/src/lib/workers/mod.rs rename to aquatic_udp/src/workers/mod.rs diff --git a/aquatic_udp/src/lib/workers/request.rs b/aquatic_udp/src/workers/request.rs similarity index 99% rename from aquatic_udp/src/lib/workers/request.rs rename to aquatic_udp/src/workers/request.rs index 00d0d53..dd0498b 100644 --- a/aquatic_udp/src/lib/workers/request.rs +++ b/aquatic_udp/src/workers/request.rs @@ -121,10 +121,10 @@ pub fn run_request_worker( } if iter_counter % 128 == 0 { - peer_valid_until = ValidUntil::new(config.cleaning.max_peer_age); - let now = Instant::now(); + peer_valid_until = ValidUntil::new_with_now(now, config.cleaning.max_peer_age); + if now > last_cleaning + cleaning_interval { torrents.clean(&config, &state.access_list); diff --git a/aquatic_udp/src/lib/workers/socket.rs b/aquatic_udp/src/workers/socket.rs similarity index 99% rename from aquatic_udp/src/lib/workers/socket.rs rename to aquatic_udp/src/workers/socket.rs index 53b214c..6906d65 100644 --- a/aquatic_udp/src/lib/workers/socket.rs +++ b/aquatic_udp/src/workers/socket.rs @@ -135,6 +135,7 @@ pub fn run_socket_worker( let mut events = Events::with_capacity(config.network.poll_event_capacity); let mut connections = ConnectionMap::default(); let mut pending_scrape_responses = PendingScrapeResponseMap::default(); + let mut access_list_cache = create_access_list_cache(&state.access_list); let mut local_responses: Vec<(Response, SocketAddr)> = Vec::new(); @@ -166,6 +167,7 @@ pub fn run_socket_worker( &state, &mut connections, &mut pending_scrape_responses, + &mut access_list_cache, &mut rng, &mut socket, &mut buffer, @@ -218,6 +220,7 @@ fn read_requests( state: &State, connections: &mut ConnectionMap, pending_scrape_responses: &mut PendingScrapeResponseMap, + access_list_cache: &mut AccessListCache, rng: &mut StdRng, socket: &mut UdpSocket, buffer: &mut [u8], @@ -231,8 +234,6 @@ fn read_requests( let mut bytes_received_ipv4: usize = 0; let mut bytes_received_ipv6 = 0; - let mut access_list_cache = create_access_list_cache(&state.access_list); - loop { match socket.recv_from(&mut buffer[..]) { Ok((amt, src)) => { @@ -272,7 +273,7 @@ fn read_requests( config, connections, pending_scrape_responses, - &mut access_list_cache, + access_list_cache, rng, request_sender, local_responses, diff --git a/aquatic_udp/src/lib/workers/statistics.rs b/aquatic_udp/src/workers/statistics.rs similarity index 100% rename from aquatic_udp/src/lib/workers/statistics.rs rename to aquatic_udp/src/workers/statistics.rs diff --git a/aquatic_ws/Cargo.toml b/aquatic_ws/Cargo.toml index 0cb4a90..d01fab8 100644 --- a/aquatic_ws/Cargo.toml +++ b/aquatic_ws/Cargo.toml @@ -9,11 +9,9 @@ repository = "https://github.com/greatest-ape/aquatic" [lib] name = "aquatic_ws" -path = "src/lib/lib.rs" [[bin]] name = "aquatic_ws" -path = "src/bin/main.rs" [features] default = ["with-mio"] diff --git a/aquatic_ws/src/lib/common/handlers.rs b/aquatic_ws/src/common/handlers.rs similarity index 100% rename from aquatic_ws/src/lib/common/handlers.rs rename to aquatic_ws/src/common/handlers.rs diff --git a/aquatic_ws/src/lib/common/mod.rs b/aquatic_ws/src/common/mod.rs similarity index 100% rename from aquatic_ws/src/lib/common/mod.rs rename to aquatic_ws/src/common/mod.rs diff --git a/aquatic_ws/src/lib/config.rs b/aquatic_ws/src/config.rs similarity index 100% rename from aquatic_ws/src/lib/config.rs rename to aquatic_ws/src/config.rs diff --git a/aquatic_ws/src/lib/glommio/common.rs b/aquatic_ws/src/glommio/common.rs similarity index 100% rename from aquatic_ws/src/lib/glommio/common.rs rename to aquatic_ws/src/glommio/common.rs diff --git a/aquatic_ws/src/lib/glommio/mod.rs b/aquatic_ws/src/glommio/mod.rs similarity index 94% rename from aquatic_ws/src/lib/glommio/mod.rs rename to aquatic_ws/src/glommio/mod.rs index ed6c495..20b86cf 100644 --- a/aquatic_ws/src/lib/glommio/mod.rs +++ b/aquatic_ws/src/glommio/mod.rs @@ -1,6 +1,6 @@ pub mod common; -pub mod handlers; -pub mod network; +pub mod request; +pub mod socket; use std::{ fs::File, @@ -19,7 +19,7 @@ use glommio::{channels::channel_mesh::MeshBuilder, prelude::*}; const SHARED_CHANNEL_SIZE: usize = 1024; -pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> { +pub fn run(config: Config, state: State) -> anyhow::Result<()> { let num_peers = config.socket_workers + config.request_workers; let request_mesh_builder = MeshBuilder::partial(num_peers, SHARED_CHANNEL_SIZE); @@ -49,7 +49,7 @@ pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> { WorkerIndex::SocketWorker(i), ); - network::run_socket_worker( + socket::run_socket_worker( config, state, tls_config, @@ -79,7 +79,7 @@ pub fn run_inner(config: Config, state: State) -> anyhow::Result<()> { WorkerIndex::RequestWorker(i), ); - handlers::run_request_worker(config, state, request_mesh_builder, response_mesh_builder) + request::run_request_worker(config, state, request_mesh_builder, response_mesh_builder) .await }); diff --git a/aquatic_ws/src/lib/glommio/handlers.rs b/aquatic_ws/src/glommio/request.rs similarity index 100% rename from aquatic_ws/src/lib/glommio/handlers.rs rename to aquatic_ws/src/glommio/request.rs diff --git a/aquatic_ws/src/lib/glommio/network.rs b/aquatic_ws/src/glommio/socket.rs similarity index 100% rename from aquatic_ws/src/lib/glommio/network.rs rename to aquatic_ws/src/glommio/socket.rs diff --git a/aquatic_ws/src/lib/lib.rs b/aquatic_ws/src/lib.rs similarity index 94% rename from aquatic_ws/src/lib/lib.rs rename to aquatic_ws/src/lib.rs index 3ae27b6..2a4f0d9 100644 --- a/aquatic_ws/src/lib/lib.rs +++ b/aquatic_ws/src/lib.rs @@ -34,7 +34,7 @@ pub fn run(config: Config) -> ::anyhow::Result<()> { cfg_if!( if #[cfg(feature = "with-glommio")] { - ::std::thread::spawn(move || glommio::run_inner(config, state)); + ::std::thread::spawn(move || glommio::run(config, state)); } else { ::std::thread::spawn(move || mio::run(config, state)); } diff --git a/aquatic_ws/src/lib/tasks.rs b/aquatic_ws/src/lib/tasks.rs deleted file mode 100644 index e4139fa..0000000 --- a/aquatic_ws/src/lib/tasks.rs +++ /dev/null @@ -1,6 +0,0 @@ -use aquatic_common::access_list::{AccessListMode, AccessListQuery}; -use histogram::Histogram; - -use crate::common::*; -use crate::config::Config; - diff --git a/aquatic_ws/src/bin/main.rs b/aquatic_ws/src/main.rs similarity index 100% rename from aquatic_ws/src/bin/main.rs rename to aquatic_ws/src/main.rs diff --git a/aquatic_ws/src/lib/mio/common.rs b/aquatic_ws/src/mio/common.rs similarity index 100% rename from aquatic_ws/src/lib/mio/common.rs rename to aquatic_ws/src/mio/common.rs diff --git a/aquatic_ws/src/lib/mio/mod.rs b/aquatic_ws/src/mio/mod.rs similarity index 98% rename from aquatic_ws/src/lib/mio/mod.rs rename to aquatic_ws/src/mio/mod.rs index b002ef3..e7ea249 100644 --- a/aquatic_ws/src/lib/mio/mod.rs +++ b/aquatic_ws/src/mio/mod.rs @@ -14,8 +14,8 @@ use parking_lot::Mutex; use privdrop::PrivDrop; pub mod common; -pub mod handlers; -pub mod network; +pub mod request; +pub mod socket; use crate::config::Config; use common::*; @@ -85,7 +85,7 @@ pub fn start_workers(config: Config, state: State) -> anyhow::Result<()> { WorkerIndex::SocketWorker(i), ); - network::run_socket_worker( + socket::run_socket_worker( config, state, i, @@ -144,7 +144,7 @@ pub fn start_workers(config: Config, state: State) -> anyhow::Result<()> { WorkerIndex::RequestWorker(i), ); - handlers::run_request_worker( + request::run_request_worker( config, state, in_message_receiver, diff --git a/aquatic_ws/src/lib/mio/handlers.rs b/aquatic_ws/src/mio/request.rs similarity index 100% rename from aquatic_ws/src/lib/mio/handlers.rs rename to aquatic_ws/src/mio/request.rs diff --git a/aquatic_ws/src/lib/mio/network/connection.rs b/aquatic_ws/src/mio/socket/connection.rs similarity index 100% rename from aquatic_ws/src/lib/mio/network/connection.rs rename to aquatic_ws/src/mio/socket/connection.rs diff --git a/aquatic_ws/src/lib/mio/network/mod.rs b/aquatic_ws/src/mio/socket/mod.rs similarity index 100% rename from aquatic_ws/src/lib/mio/network/mod.rs rename to aquatic_ws/src/mio/socket/mod.rs diff --git a/aquatic_ws/src/lib/mio/network/utils.rs b/aquatic_ws/src/mio/socket/utils.rs similarity index 100% rename from aquatic_ws/src/lib/mio/network/utils.rs rename to aquatic_ws/src/mio/socket/utils.rs