pub struct RequestTracker<V> { /* private fields */ }Expand description
Tracks pending request-response exchanges by (PeerId, RequestId).
This enables correct response correlation even when peers change their embedding (drift), since we match by who responded, not where they claim to be.
The value type V can be an enum to support multiple request types:
ⓘ
enum RequestData {
Knn { search_embedding: Embedding, k: usize },
Kfn { search_embedding: Embedding, k: usize },
Ping,
}
let tracker: RequestTracker<RequestData> = RequestTracker::new(timeout);Implementations§
Source§impl<V> RequestTracker<V>where
V: Clone,
impl<V> RequestTracker<V>where
V: Clone,
pub fn new(default_timeout: Duration) -> Self
Sourcepub fn insert(&mut self, peer_id: PeerId, data: V) -> RequestId
pub fn insert(&mut self, peer_id: PeerId, data: V) -> RequestId
Insert a new pending request, returning the assigned RequestId.
Sourcepub fn remove(&mut self, peer_id: &PeerId, request_id: &RequestId) -> Option<V>
pub fn remove(&mut self, peer_id: &PeerId, request_id: &RequestId) -> Option<V>
Remove a pending request by peer_id and request_id.
Sourcepub fn is_pending(&self, peer_id: &PeerId, request_id: &RequestId) -> bool
pub fn is_pending(&self, peer_id: &PeerId, request_id: &RequestId) -> bool
Check if a request is pending for this peer.
Sourcepub fn process_timeouts(&mut self) -> Vec<(RequestKey, V)>
pub fn process_timeouts(&mut self) -> Vec<(RequestKey, V)>
Process timeouts, returning timed-out (RequestKey, V) pairs.
pub fn len(&self) -> usize
pub fn is_empty(&self) -> bool
Sourcepub fn iter(&self) -> impl Iterator<Item = (&RequestKey, &V)>
pub fn iter(&self) -> impl Iterator<Item = (&RequestKey, &V)>
Iterate over all pending requests.
Sourcepub fn remove_all_for_peer(&mut self, peer_id: &PeerId) -> Vec<(RequestKey, V)>
pub fn remove_all_for_peer(&mut self, peer_id: &PeerId) -> Vec<(RequestKey, V)>
Remove all pending requests for a specific peer. Returns all removed (RequestKey, V) pairs.
Trait Implementations§
Source§impl<V: Clone> Clone for RequestTracker<V>
impl<V: Clone> Clone for RequestTracker<V>
Source§fn clone(&self) -> RequestTracker<V>
fn clone(&self) -> RequestTracker<V>
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl<V> Freeze for RequestTracker<V>
impl<V> RefUnwindSafe for RequestTracker<V>where
V: RefUnwindSafe,
impl<V> Send for RequestTracker<V>where
V: Send,
impl<V> Sync for RequestTracker<V>where
V: Sync,
impl<V> Unpin for RequestTracker<V>where
V: Unpin,
impl<V> UnsafeUnpin for RequestTracker<V>
impl<V> UnwindSafe for RequestTracker<V>where
V: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more