don't delete flagged torrents, use Instant instead of SystemTime
This commit is contained in:
parent
7a7faf405e
commit
e42fec3ece
|
@ -7,6 +7,8 @@ use tokio::io::{AsyncBufReadExt, AsyncWriteExt};
|
||||||
use tokio::stream::StreamExt;
|
use tokio::stream::StreamExt;
|
||||||
use tokio::sync::RwLock;
|
use tokio::sync::RwLock;
|
||||||
|
|
||||||
|
const TWO_HOURS: std::time::Duration = std::time::Duration::from_secs(3600 * 2);
|
||||||
|
|
||||||
#[derive(Deserialize, Clone, PartialEq)]
|
#[derive(Deserialize, Clone, PartialEq)]
|
||||||
pub enum TrackerMode {
|
pub enum TrackerMode {
|
||||||
/// In static mode torrents are tracked only if they were added ahead of time.
|
/// In static mode torrents are tracked only if they were added ahead of time.
|
||||||
|
@ -29,7 +31,7 @@ struct TorrentPeer {
|
||||||
downloaded: u64,
|
downloaded: u64,
|
||||||
left: u64,
|
left: u64,
|
||||||
event: Events,
|
event: Events,
|
||||||
updated: std::time::SystemTime,
|
updated: std::time::Instant,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Ord, PartialEq, Eq, Clone)]
|
#[derive(Ord, PartialEq, Eq, Clone)]
|
||||||
|
@ -162,7 +164,7 @@ impl TorrentEntry {
|
||||||
let mut was_seeder = false;
|
let mut was_seeder = false;
|
||||||
let mut is_completed = left == 0 && (event as u32) == (Events::Complete as u32);
|
let mut is_completed = left == 0 && (event as u32) == (Events::Complete as u32);
|
||||||
if let Some(prev) = self.peers.insert(*peer_id, TorrentPeer {
|
if let Some(prev) = self.peers.insert(*peer_id, TorrentPeer {
|
||||||
updated: std::time::SystemTime::now(),
|
updated: std::time::Instant::now(),
|
||||||
left,
|
left,
|
||||||
downloaded,
|
downloaded,
|
||||||
uploaded,
|
uploaded,
|
||||||
|
@ -413,8 +415,6 @@ impl TorrentTracker {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn cleanup(&self) {
|
async fn cleanup(&self) {
|
||||||
use std::ops::Add;
|
|
||||||
let now = std::time::SystemTime::now();
|
|
||||||
let mut lock = self.database.torrent_peers.write().await;
|
let mut lock = self.database.torrent_peers.write().await;
|
||||||
let db: &mut BTreeMap<InfoHash, TorrentEntry> = &mut *lock;
|
let db: &mut BTreeMap<InfoHash, TorrentEntry> = &mut *lock;
|
||||||
let mut torrents_to_remove = Vec::new();
|
let mut torrents_to_remove = Vec::new();
|
||||||
|
@ -426,7 +426,7 @@ impl TorrentTracker {
|
||||||
let torrent_peers = &mut v.peers;
|
let torrent_peers = &mut v.peers;
|
||||||
|
|
||||||
for (peer_id, state) in torrent_peers.iter() {
|
for (peer_id, state) in torrent_peers.iter() {
|
||||||
if state.updated.add(std::time::Duration::new(3600 * 2, 0)) < now {
|
if state.updated.elapsed() > TWO_HOURS {
|
||||||
// over 2 hours past since last update...
|
// over 2 hours past since last update...
|
||||||
peers_to_remove.push(*peer_id);
|
peers_to_remove.push(*peer_id);
|
||||||
}
|
}
|
||||||
|
@ -439,7 +439,7 @@ impl TorrentTracker {
|
||||||
|
|
||||||
if self.mode == TrackerMode::DynamicMode {
|
if self.mode == TrackerMode::DynamicMode {
|
||||||
// peer-less torrents..
|
// peer-less torrents..
|
||||||
if v.peers.len() == 0 {
|
if v.peers.len() == 0 && !v.is_flagged() {
|
||||||
torrents_to_remove.push(k.clone());
|
torrents_to_remove.push(k.clone());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,7 @@ pub fn build_server(
|
||||||
|
|
||||||
// DELETE /t/:info_hash
|
// DELETE /t/:info_hash
|
||||||
let t3 = tracker.clone();
|
let t3 = tracker.clone();
|
||||||
let delete_torrent = filters::method::post()
|
let delete_torrent = filters::method::delete()
|
||||||
.and(filters::path::param())
|
.and(filters::path::param())
|
||||||
.map(move |info_hash: InfoHash| {
|
.map(move |info_hash: InfoHash| {
|
||||||
let tracker = t3.clone();
|
let tracker = t3.clone();
|
||||||
|
|
Loading…
Reference in a new issue