pub struct IterativeLookup {
pub target: H256,
/* private fields */
}Expand description
Iterative convergence lookup (geth-style).
Generates a random target, seeds with closest known nodes, queries alpha=3 closest not-yet-asked nodes, feeds responses back, and iterates until convergence (no more unqueried entries closer than what we have, or timeout).
Fields§
§target: H256Implementations§
Source§impl IterativeLookup
impl IterativeLookup
Sourcepub fn new(target: H256, seed_nodes: Vec<(H256, Node)>) -> Self
pub fn new(target: H256, seed_nodes: Vec<(H256, Node)>) -> Self
Create a new iterative lookup seeded with the given nodes.
Sourcepub fn next_to_query(&mut self, count: usize) -> Vec<(H256, Node)>
pub fn next_to_query(&mut self, count: usize) -> Vec<(H256, Node)>
Returns up to count closest unqueried entries, marks them as queried,
and increments the in-flight counter.
Sourcepub fn feed_results(&mut self, nodes: Vec<(H256, Node)>)
pub fn feed_results(&mut self, nodes: Vec<(H256, Node)>)
Feed response nodes into the lookup. Inserts new nodes if they are
closer than the farthest entry (or the result set is not full yet).
Deduplicates via the seen set.
Sourcepub fn record_response(&mut self)
pub fn record_response(&mut self)
Record that a response was received (decrements in-flight counter).
Sourcepub fn record_timeout(&mut self)
pub fn record_timeout(&mut self)
Record that a query timed out (same as record_response).
Sourcepub fn is_finished(&self) -> bool
pub fn is_finished(&self) -> bool
Returns true if the lookup has converged:
- All entries in the result set have been queried (don’t wait for stragglers — late responses still get processed via handle_neighbors and feed into the connection pool / next lookup), OR
- The lookup has timed out.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for IterativeLookup
impl RefUnwindSafe for IterativeLookup
impl Send for IterativeLookup
impl Sync for IterativeLookup
impl Unpin for IterativeLookup
impl UnsafeUnpin for IterativeLookup
impl UnwindSafe for IterativeLookup
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.