iroh_gossip::proto

Struct PlumtreeConfig

Source
pub struct PlumtreeConfig {
    pub graft_timeout_1: Duration,
    pub graft_timeout_2: Duration,
    pub dispatch_timeout: Duration,
    pub optimization_threshold: Round,
    pub message_cache_retention: Duration,
    pub message_id_retention: Duration,
    pub cache_evict_interval: Duration,
}
Expand description

Configuration for the gossip broadcast layer.

Currently, the expectation is that the configuration is the same for all peers in the network (as recommended in the paper).

Fields§

§graft_timeout_1: Duration

When receiving an [IHave] message, this timeout is registered. If the message for the [IHave] was not received once the timeout is expired, a [Graft] message is sent to the peer that sent us the [IHave] to request the message payload.

The plumtree paper notes:

The timeout value is a protocol parameter that should be configured considering the diameter of the overlay and a target maximum recovery latency, defined by the application requirements. (p.8)

§graft_timeout_2: Duration

This timeout is registered when sending a [Graft] message. If a reply has not been received once the timeout expires, we send another [Graft] message to the next peer that sent us an [IHave] for this message.

The plumtree paper notes:

This second timeout value should be smaller that the first, in the order of an average round trip time to a neighbor.

§dispatch_timeout: Duration

Timeout after which [IHave] messages are pushed to peers.

§optimization_threshold: Round

The protocol performs a tree optimization, which promotes lazy peers to eager peers if the [Message::IHave] messages received from them have a lower number of hops from the message’s origin as the [InEvent::Broadcast] messages received from our eager peers. This parameter is the number of hops that the lazy peers must be closer to the origin than our eager peers to be promoted to become an eager peer.

§message_cache_retention: Duration

Duration for which to keep gossip messages in the internal message cache.

Messages broadcast from this node or received from other nodes are kept in an internal cache for this duration before being evicted. If this is too low, other nodes will not be able to retrieve messages once they need them. If this is high, the cache will grow.

Should be at least around several round trip times to peers.

§message_id_retention: Duration

Duration for which to keep the [MessageId]s for received messages.

Should be at least as long as Self::message_cache_retention, usually will be longer to not accidentally receive messages multiple times.

§cache_evict_interval: Duration

How often the internal caches will be checked for expired items.

Trait Implementations§

Source§

impl Clone for Config

Source§

fn clone(&self) -> Config

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Config

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Config

Source§

fn default() -> Self

Sensible defaults for the plumtree configuration

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<T> ErasedDestructor for T
where T: 'static,

§

impl<T> MaybeSendSync for T