Expand description
Request deduplication for concurrent DHT/Bitswap lookups.
When multiple callers request the same CID simultaneously, only one DHT/Bitswap request should be issued. All additional callers coalesce onto the first (“leader”) request and share its result once resolved.
§Example
use ipfrs_network::request_dedup::{RequestDeduplicator, AcquireResult, ResolveResult};
use std::time::Duration;
let dedup = RequestDeduplicator::new(64, Duration::from_secs(30));
let cid = "QmExample";
match dedup.try_acquire(cid) {
AcquireResult::Leader => {
// Issue the DHT/Bitswap request, then call resolve()
dedup.resolve(cid, ResolveResult::NotFound);
}
AcquireResult::Waiter(handle) => {
// Another request is in flight; handle tracks the waiter slot
let _ = handle;
}
}Structs§
- Dedup
Stats - Atomic performance counters for
RequestDeduplicator. - Dedup
Stats Snapshot - A point-in-time view of
DedupStatscounters. - Request
Deduplicator - Deduplicates concurrent requests for the same CID.
- Waiter
Handle - A lightweight handle returned to a caller that coalesced onto an existing in-flight request.
Enums§
- Acquire
Result - Returned by
RequestDeduplicator::try_acquire. - Resolve
Result - The outcome of a DHT/Bitswap lookup operation.