1
0
Fork 0
mirror of https://codeberg.org/icewind/shelve.git synced 2026-06-03 12:04:09 +02:00

factor out expire thread

This commit is contained in:
Robin Appelman 2019-11-19 21:55:36 +01:00
commit ec4e51c83d

View file

@ -13,7 +13,7 @@ use std::env::current_dir;
use std::fs::{create_dir, read_dir, remove_dir_all};
use std::io;
use std::path::PathBuf;
use std::thread::{sleep, spawn};
use std::thread::{sleep, spawn, JoinHandle};
use std::time::{Duration, SystemTime, UNIX_EPOCH};
mod expire_queue;
@ -91,35 +91,7 @@ fn main() {
.map(PathBuf::from)
.unwrap_or_else(|| current_dir().unwrap_or_default().join("data"));
let expire_basedir = basedir.clone();
let expire_queue_clone = expire_queue.clone();
spawn(move || {
for dir_entry in read_dir(&expire_basedir).expect("Failed to list base directory") {
if let Ok(entry) = dir_entry {
if let Some(upload_id) = entry
.file_name()
.to_str()
.and_then(|s| UploadId::new(s).ok())
{
expire_queue_clone.push(upload_id);
}
}
}
println!(
"Loaded {} existing uploads for expiry",
expire_queue_clone.len()
);
loop {
for expired in expire_queue_clone.get_expired(now()) {
let _ = remove_dir_all(expire_basedir.join(expired.as_string()));
}
sleep(Duration::from_secs(5 * 60));
}
});
expire_job(basedir.clone(), expire_queue.clone());
rocket::ignite()
.manage(tokens)
@ -128,3 +100,27 @@ fn main() {
.mount("/", routes![home, upload, download])
.launch();
}
fn expire_job(expire_basedir: PathBuf, expire_queue: ExpireQueue) -> JoinHandle<()> {
spawn(move || {
for dir_entry in read_dir(&expire_basedir).expect("Failed to list base directory") {
if let Ok(entry) = dir_entry {
if let Some(upload_id) = entry
.file_name()
.to_str()
.and_then(|s| UploadId::new(s).ok())
{
expire_queue.push(upload_id);
}
}
}
loop {
for expired in expire_queue.get_expired(now()) {
let _ = remove_dir_all(expire_basedir.join(expired.as_string()));
}
sleep(Duration::from_secs(5 * 60));
}
})
}