Skip to main content

EndgameState

Struct EndgameState 

Source
pub struct EndgameState { /* private fields */ }
Expand description

Tracks duplicate requests during endgame mode.

In endgame mode (when <=5 pieces remain incomplete), we request the same block from multiple peers simultaneously to speed up completion. When any peer responds with the block data, we send Cancel messages to the other peers that also received the request for that block.

This struct maintains the mapping from block identifiers to the list of peers that were sent duplicate requests, enabling efficient cancellation on arrival.

Implementations§

Source§

impl EndgameState

Source

pub fn new() -> Self

Create a new EndgameState in inactive state

Source

pub fn enter_endgame(&mut self)

Enter endgame mode - enables duplicate request tracking

Source

pub fn exit_endgame(&mut self)

Exit endgame mode and clear all tracked requests

Source

pub fn track_request( &mut self, piece: u32, offset: u32, len: u32, peer_id: usize, )

Register that a request was sent to a peer during endgame

This tracks which peers have pending requests for each block so we can cancel redundant requests when the first response arrives.

Source

pub fn get_cancel_targets( &self, piece: u32, offset: u32, len: u32, ) -> Vec<usize>

When a block arrives, find other peers that have pending requests for the same block

Returns the list of peer indices that should receive Cancel messages. Does NOT remove the entry (call remove_request after sending cancels).

Source

pub fn remove_request(&mut self, piece: u32, offset: u32, len: u32)

Remove a tracked request after cancel or completion

Called after Cancel messages have been sent and the block is fully processed.

Source

pub fn is_endgame_active(&self) -> bool

Check if endgame mode is currently active

Source

pub fn tracked_count(&self) -> usize

Get the number of actively tracked duplicate requests (for debugging/metrics)

Trait Implementations§

Source§

impl Default for EndgameState

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more