refactor(urls): inline fetch_shared into its one caller

It bound the process-wide map and the site fetch for shared_fetch and had a
single call site; the caller now passes both directly.
This commit is contained in:
2026-09-21 17:37:31 +08:00
parent 90663a51cc
commit bd98001d42
+3 -9
View File
@@ -54,13 +54,7 @@ type FetchOutcome = Result<Option<x_media::site::Fetched>, x_media::site::FetchE
/// The channel a sharer publishes its result on, and waiters subscribe to. /// The channel a sharer publishes its result on, and waiters subscribe to.
type SharedFetch<T> = tokio::sync::broadcast::Sender<std::sync::Arc<T>>; type SharedFetch<T> = tokio::sync::broadcast::Sender<std::sync::Arc<T>>;
/// Fetches `url`, sharing one in-flight fetch per `key` (its site cache key) /// The sharing core, over the caller's own map so the sharing rules can
/// with every other caller asking for the same post meanwhile.
async fn fetch_shared(key: &str, url: &str) -> std::sync::Arc<FetchOutcome> {
shared_fetch(&IN_FLIGHT_FETCHES, key, || x_media::site::fetch(url)).await
}
/// [`fetch_shared`]'s core, over the caller's own map so the sharing rules can
/// be tested without a network fetch. /// be tested without a network fetch.
/// ///
/// A caller that finds a live entry subscribes to it and waits; the caller that /// A caller that finds a live entry subscribes to it and waits; the caller that
@@ -676,9 +670,9 @@ async fn url_media_inner(
log::debug!("fetching [key={}]", log_key(url)); log::debug!("fetching [key={}]", log_key(url));
log::trace!("fetching {url}"); log::trace!("fetching {url}");
// One fetch per post at a time: a concurrent duplicate of this link waits // One fetch per post at a time: a concurrent duplicate of this link waits
// for *this* fetch instead of running its own (see [`fetch_shared`]). // for *this* fetch instead of running its own.
let outcome = match x_media::site::cache_key(url) { let outcome = match x_media::site::cache_key(url) {
Some(key) => fetch_shared(&key, url).await, Some(key) => shared_fetch(&IN_FLIGHT_FETCHES, &key, || x_media::site::fetch(url)).await,
// A URL no site claims (reached only through `/test`): nothing to key // A URL no site claims (reached only through `/test`): nothing to key
// the sharing on, and the dispatcher answers without a request. // the sharing on, and the dispatcher answers without a request.
None => std::sync::Arc::new(x_media::site::fetch(url).await), None => std::sync::Arc::new(x_media::site::fetch(url).await),