Shared remote cache upload worker for spider and chromey.
This crate provides a high-performance, concurrent batch upload worker
for sending cached HTTP responses to a remote hybrid_cache_server.
Client injection
Call [set_client] at startup, before the first upload or read, to
share your application's reqwest::Client. This avoids compiling a
second TLS stack and reuses the existing connection pool. If nothing is
injected before first use, the crate builds a default client
([default_client_builder]: 250 ms connect timeout, request timeout
equal to the batch timeout) and a later [set_client] is ignored.
[client_source] reports which one is active.
Site keys
Every upload carries the job's cache_site as the x-cache-site
header and as the payload's website_key. A batch request only ever
holds jobs with the same cache_site.
Features
- Batch-drain: Collects pending jobs from the channel before uploading
- Concurrent uploads: Configurable parallelism via semaphore (default 8)
- Lock-free dedup: DashSet for in-flight key tracking (no Mutex, no deadlocks)
- Rate limiting: Per-spawn pacing without blocking the drain loop
- Batch POST: Uses
/cache/index/batchwhen multiple jobs are ready - Best-effort:
try_enqueuenever blocks; drops on full queue - Metrics: with the default
metricsfeature, counters, a gauge and a histogram go through themetricsfacade (see [metrics])