mirror of
https://codeberg.org/icewind/shelve.git
synced 2026-06-03 20:14:08 +02:00
factor out expire thread
This commit is contained in:
parent
4637bf1dd9
commit
ec4e51c83d
1 changed files with 14 additions and 18 deletions
56
src/main.rs
56
src/main.rs
|
|
@ -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));
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue