From fa60eddcc417751b5c0d71c270e5b6da4c5d924d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20Frosteg=C3=A5rd?= Date: Wed, 8 Apr 2020 21:22:12 +0200 Subject: [PATCH] aquatic: add CleaningConfig and StatisticsConfig to Config, use them --- aquatic/src/lib/config.rs | 41 +++++++++++++++++++++++++++++++++++++-- aquatic/src/lib/lib.rs | 11 ++++++----- aquatic/src/lib/tasks.rs | 13 +++++++++---- 3 files changed, 54 insertions(+), 11 deletions(-) diff --git a/aquatic/src/lib/config.rs b/aquatic/src/lib/config.rs index d5329d4..3984b05 100644 --- a/aquatic/src/lib/config.rs +++ b/aquatic/src/lib/config.rs @@ -9,7 +9,23 @@ pub struct Config { pub poll_event_capacity: usize, pub max_scrape_torrents: u8, pub max_response_peers: usize, - pub statistics_interval: u64, + pub statistics: StatisticsConfig, + pub cleaning: CleaningConfig, +} + + + +#[derive(Clone)] +pub struct StatisticsConfig { + pub interval: u64, +} + + +#[derive(Clone)] +pub struct CleaningConfig { + pub interval: u64, + pub max_peer_age: u64, + pub max_connection_age: u64, } @@ -22,7 +38,28 @@ impl Default for Config { recv_buffer_size: 4096 * 128, max_scrape_torrents: 255, max_response_peers: 255, - statistics_interval: 5, + statistics: StatisticsConfig::default(), + cleaning: CleaningConfig::default(), + } + } +} + + +impl Default for StatisticsConfig { + fn default() -> Self { + Self { + interval: 5, + } + } +} + + +impl Default for CleaningConfig { + fn default() -> Self { + Self { + interval: 30, + max_peer_age: 60 * 20, + max_connection_age: 60 * 5, } } } \ No newline at end of file diff --git a/aquatic/src/lib/lib.rs b/aquatic/src/lib/lib.rs index cbb2665..24c4151 100644 --- a/aquatic/src/lib/lib.rs +++ b/aquatic/src/lib/lib.rs @@ -26,11 +26,12 @@ pub fn run(){ }); } - { + if config.statistics.interval != 0 { let state = state.clone(); + let config = config.clone(); ::std::thread::spawn(move || { - let interval = config.statistics_interval; + let interval = config.statistics.interval; loop { ::std::thread::sleep(Duration::from_secs(interval)); @@ -102,9 +103,9 @@ pub fn run(){ } loop { - ::std::thread::sleep(Duration::from_secs(30)); + ::std::thread::sleep(Duration::from_secs(config.cleaning.interval)); - tasks::clean_connections(&state); - tasks::clean_torrents(&state); + tasks::clean_connections(&state, &config); + tasks::clean_torrents(&state, &config); } } diff --git a/aquatic/src/lib/tasks.rs b/aquatic/src/lib/tasks.rs index 9a6bd27..3271e67 100644 --- a/aquatic/src/lib/tasks.rs +++ b/aquatic/src/lib/tasks.rs @@ -2,18 +2,23 @@ use std::sync::atomic::Ordering; use std::time::{Duration, Instant}; use crate::common::*; +use crate::config::Config; -pub fn clean_connections(state: &State){ - let limit = Instant::now() - Duration::from_secs(300); +pub fn clean_connections(state: &State, config: &Config){ + let limit = Instant::now() - Duration::from_secs( + config.cleaning.max_connection_age + ); state.connections.retain(|_, v| v.0 > limit); state.connections.shrink_to_fit(); } -pub fn clean_torrents(state: &State){ - let limit = Instant::now() - Duration::from_secs(1200); +pub fn clean_torrents(state: &State, config: &Config){ + let limit = Instant::now() - Duration::from_secs( + config.cleaning.max_peer_age + ); state.torrents.retain(|_, torrent| { let num_seeders = &torrent.num_seeders;