Trackers list from outside

This commit is contained in:
Igor Katson 2025-02-27 12:55:10 +00:00
parent d709557372
commit 52be6d7cef
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
3 changed files with 15 additions and 5 deletions

View file

@ -98,7 +98,9 @@ tracing-subscriber = { version = "0.3", default-features = false, features = [
], optional = true } ], optional = true }
uuid = { version = "1.2", features = ["v4"] } uuid = { version = "1.2", features = ["v4"] }
futures = "0.3" futures = "0.3"
url = { version = "=2.5.2", default-features = false } # can't upgrade yet until min version is Rust 1.81, see https://github.com/servo/rust-url/issues/992 url = { version = "=2.5.2", default-features = false, features = [
"serde",
] } # can't upgrade yet until min version is Rust 1.81, see https://github.com/servo/rust-url/issues/992
hex = "0.4" hex = "0.4"
backoff = "0.4.0" backoff = "0.4.0"
@ -119,7 +121,7 @@ notify = { version = "7", optional = true }
walkdir = "2.5.0" walkdir = "2.5.0"
arc-swap = "1.7.1" arc-swap = "1.7.1"
intervaltree = "0.2.7" intervaltree = "0.2.7"
async-compression = {version="0.4.18", features= ["tokio", "gzip"] } async-compression = { version = "0.4.18", features = ["tokio", "gzip"] }
[build-dependencies] [build-dependencies]
anyhow = "1" anyhow = "1"

View file

@ -121,6 +121,7 @@ pub struct Session {
default_storage_factory: Option<BoxStorageFactory>, default_storage_factory: Option<BoxStorageFactory>,
persistence: Option<Arc<dyn SessionPersistenceStore>>, persistence: Option<Arc<dyn SessionPersistenceStore>>,
disk_write_tx: Option<DiskWorkQueueSender>, disk_write_tx: Option<DiskWorkQueueSender>,
trackers: HashSet<url::Url>,
// Limits and throttling // Limits and throttling
pub(crate) concurrent_initialize_semaphore: Arc<tokio::sync::Semaphore>, pub(crate) concurrent_initialize_semaphore: Arc<tokio::sync::Semaphore>,
@ -647,6 +648,7 @@ impl Session {
opts.concurrent_init_limit.unwrap_or(3), opts.concurrent_init_limit.unwrap_or(3),
)), )),
ratelimits: Limits::new(opts.ratelimits), ratelimits: Limits::new(opts.ratelimits),
trackers: opts.trackers,
#[cfg(feature = "disable-upload")] #[cfg(feature = "disable-upload")]
_disable_upload: opts.disable_upload, _disable_upload: opts.disable_upload,
blocklist, blocklist,
@ -1337,6 +1339,8 @@ impl Session {
if is_private && trackers.len() > 1 { if is_private && trackers.len() > 1 {
warn!("private trackers are not fully implemented, so using only the first tracker"); warn!("private trackers are not fully implemented, so using only the first tracker");
trackers.truncate(1); trackers.truncate(1);
} else {
trackers.extend(self.trackers.iter().cloned());
} }
let tracker_rx_stats = PeerRxTorrentInfo { let tracker_rx_stats = PeerRxTorrentInfo {

View file

@ -440,7 +440,7 @@ async fn parse_trackers_file(filename: &str) -> anyhow::Result<HashSet<url::Url>
let content = tokio::fs::read_to_string(filename) let content = tokio::fs::read_to_string(filename)
.await .await
.with_context(|| format!("error opening {filename}"))?; .with_context(|| format!("error opening {filename}"))?;
Ok(content let trackers = content
.lines() .lines()
.filter_map(|s| { .filter_map(|s| {
let s = s.trim(); let s = s.trim();
@ -449,7 +449,9 @@ async fn parse_trackers_file(filename: &str) -> anyhow::Result<HashSet<url::Url>
} }
url::Url::parse(s).ok() url::Url::parse(s).ok()
}) })
.collect()) .collect::<HashSet<url::Url>>();
info!(filename, count = trackers.len(), "parsed trackers");
Ok(trackers)
} }
async fn async_main(opts: Opts, cancel: CancellationToken) -> anyhow::Result<()> { async fn async_main(opts: Opts, cancel: CancellationToken) -> anyhow::Result<()> {
@ -471,7 +473,9 @@ async fn async_main(opts: Opts, cancel: CancellationToken) -> anyhow::Result<()>
}; };
let trackers = if let Some(f) = opts.trackers_filename { let trackers = if let Some(f) = opts.trackers_filename {
parse_trackers_file(&f).await? parse_trackers_file(&f)
.await
.context("error reading trackers file")?
} else { } else {
Default::default() Default::default()
}; };