aquatic_udp: split cleaning interval for connections and torrents

This commit is contained in:
Joakim Frostegård 2021-11-03 00:07:52 +01:00
parent 5f10e5e7f4
commit afe3e2465f
5 changed files with 20 additions and 13 deletions

View file

@ -91,12 +91,14 @@ pub struct StatisticsConfig {
#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(default)]
pub struct CleaningConfig {
/// Update access list and clean torrents this often (seconds)
pub interval: u64,
/// Remove peers that haven't announced for this long (seconds)
pub max_peer_age: u64,
/// Clean connections this often (seconds)
pub connection_cleaning_interval: u64,
/// Clean torrents this often (seconds)
pub torrent_cleaning_interval: u64,
/// Remove connections that are older than this (seconds)
pub max_connection_age: u64,
/// Remove peers that haven't announced for this long (seconds)
pub max_peer_age: u64,
}
impl Default for Config {
@ -160,9 +162,10 @@ impl Default for StatisticsConfig {
impl Default for CleaningConfig {
fn default() -> Self {
Self {
interval: 30,
max_peer_age: 60 * 20,
connection_cleaning_interval: 60,
torrent_cleaning_interval: 60 * 2,
max_connection_age: 60 * 5,
max_peer_age: 60 * 20,
}
}
}

View file

@ -34,7 +34,7 @@ pub async fn run_request_worker(
enclose!((config, torrents, state) move || async move {
torrents.borrow_mut().clean(&config, &state.access_list);
Some(Duration::from_secs(config.cleaning.interval))
Some(Duration::from_secs(config.cleaning.torrent_cleaning_interval))
})()
}));

View file

@ -127,11 +127,11 @@ pub async fn run_socket_worker(
let pending_scrape_responses = Rc::new(RefCell::new(PendingScrapeResponses::default()));
// Periodically clean pending_scrape_responses
TimerActionRepeat::repeat(enclose!((config, pending_scrape_responses) move || {
enclose!((config, pending_scrape_responses) move || async move {
TimerActionRepeat::repeat(enclose!((pending_scrape_responses) move || {
enclose!((pending_scrape_responses) move || async move {
pending_scrape_responses.borrow_mut().clean();
Some(Duration::from_secs(config.cleaning.interval))
Some(Duration::from_secs(120))
})()
}));
@ -201,7 +201,7 @@ async fn read_requests(
enclose!((config, connections) move || async move {
connections.borrow_mut().clean();
Some(Duration::from_secs(config.cleaning.interval))
Some(Duration::from_secs(config.cleaning.connection_cleaning_interval))
})()
}));

View file

@ -141,7 +141,9 @@ pub fn run_inner(config: Config, state: State) -> ::anyhow::Result<()> {
.unwrap();
loop {
::std::thread::sleep(Duration::from_secs(config.cleaning.interval));
::std::thread::sleep(Duration::from_secs(
config.cleaning.torrent_cleaning_interval,
));
state.torrents.lock().clean(&config, &state.access_list);
}

View file

@ -88,7 +88,9 @@ pub fn run_socket_worker(
if iter_counter % 32 == 0 {
let now = Instant::now();
if last_cleaning + Duration::from_secs(config.cleaning.interval) > now {
if last_cleaning + Duration::from_secs(config.cleaning.connection_cleaning_interval)
> now
{
connections.clean();
last_cleaning = now;