libp2p::kad

Struct Config

pub struct Config { /* private fields */ }
Available on crate feature kad only.
Expand description

The configuration for the Kademlia behaviour.

The configuration is consumed by Behaviour::new.

Implementations§

§

impl Config

pub fn new(protocol_name: StreamProtocol) -> Config

Builds a new Config with the given protocol name.

pub fn default() -> Config

👎Deprecated: Use Config::new instead

Returns the default configuration.

pub fn set_protocol_names(&mut self, names: Vec<StreamProtocol>) -> &mut Config

👎Deprecated: Use Config::new instead

Sets custom protocol names.

Kademlia nodes only communicate with other nodes using the same protocol name. Using custom name(s) therefore allows to segregate the DHT from others, if that is desired.

More than one protocol name can be supplied. In this case the node will be able to talk to other nodes supporting any of the provided names. Multiple names must be used with caution to avoid network partitioning.

pub fn set_query_timeout(&mut self, timeout: Duration) -> &mut Config

Sets the timeout for a single query.

Note: A single query usually comprises at least as many requests as the replication factor, i.e. this is not a request timeout.

The default is 60 seconds.

pub fn set_replication_factor( &mut self, replication_factor: NonZero<usize>, ) -> &mut Config

Sets the replication factor to use.

The replication factor determines to how many closest peers a record is replicated. The default is crate::K_VALUE.

pub fn set_parallelism(&mut self, parallelism: NonZero<usize>) -> &mut Config

Sets the allowed level of parallelism for iterative queries.

The α parameter in the Kademlia paper. The maximum number of peers that an iterative query is allowed to wait for in parallel while iterating towards the closest nodes to a target. Defaults to ALPHA_VALUE.

This only controls the level of parallelism of an iterative query, not the level of parallelism of a query to a fixed set of peers.

When used with Config::disjoint_query_paths it equals the amount of disjoint paths used.

pub fn disjoint_query_paths(&mut self, enabled: bool) -> &mut Config

Require iterative queries to use disjoint paths for increased resiliency in the presence of potentially adversarial nodes.

When enabled the number of disjoint paths used equals the configured parallelism.

See the S/Kademlia paper for more information on the high level design as well as its security improvements.

pub fn set_record_ttl(&mut self, record_ttl: Option<Duration>) -> &mut Config

Sets the TTL for stored records.

The TTL should be significantly longer than the (re-)publication interval, to avoid premature expiration of records. The default is 36 hours.

None means records never expire.

Does not apply to provider records.

pub fn set_record_filtering(&mut self, filtering: StoreInserts) -> &mut Config

Sets whether or not records should be filtered before being stored.

See StoreInserts for the different values. Defaults to StoreInserts::Unfiltered.

pub fn set_replication_interval( &mut self, interval: Option<Duration>, ) -> &mut Config

Sets the (re-)replication interval for stored records.

Periodic replication of stored records ensures that the records are always replicated to the available nodes closest to the key in the context of DHT topology changes (i.e. nodes joining and leaving), thus ensuring persistence until the record expires. Replication does not prolong the regular lifetime of a record (for otherwise it would live forever regardless of the configured TTL). The expiry of a record is only extended through re-publication.

This interval should be significantly shorter than the publication interval, to ensure persistence between re-publications. The default is 1 hour.

None means that stored records are never re-replicated.

Does not apply to provider records.

pub fn set_publication_interval( &mut self, interval: Option<Duration>, ) -> &mut Config

Sets the (re-)publication interval of stored records.

Records persist in the DHT until they expire. By default, published records are re-published in regular intervals for as long as the record exists in the local storage of the original publisher, thereby extending the records lifetime.

This interval should be significantly shorter than the record TTL, to ensure records do not expire prematurely. The default is 24 hours.

None means that stored records are never automatically re-published.

Does not apply to provider records.

pub fn set_provider_record_ttl(&mut self, ttl: Option<Duration>) -> &mut Config

Sets the TTL for provider records.

None means that stored provider records never expire.

Must be significantly larger than the provider publication interval.

pub fn set_provider_publication_interval( &mut self, interval: Option<Duration>, ) -> &mut Config

Sets the interval at which provider records for keys provided by the local node are re-published.

None means that stored provider records are never automatically re-published.

Must be significantly less than the provider record TTL.

pub fn set_max_packet_size(&mut self, size: usize) -> &mut Config

Modifies the maximum allowed size of individual Kademlia packets.

It might be necessary to increase this value if trying to put large records.

pub fn set_kbucket_inserts(&mut self, inserts: BucketInserts) -> &mut Config

Sets the k-bucket insertion strategy for the Kademlia routing table.

pub fn set_caching(&mut self, c: Caching) -> &mut Config

Sets the Caching strategy to use for successful lookups.

The default is Caching::Enabled with a max_peers of 1. Hence, with default settings and a lookup quorum of 1, a successful lookup will result in the record being cached at the closest node to the key that did not return the record, i.e. the standard Kademlia behaviour.

pub fn set_periodic_bootstrap_interval( &mut self, interval: Option<Duration>, ) -> &mut Config

Sets the interval on which Behaviour::bootstrap is called periodically.

  • Default to 5 minutes.
  • Set to None to disable periodic bootstrap.

pub fn set_kbucket_size(&mut self, size: NonZero<usize>) -> &mut Config

Sets the configuration for the k-buckets.

  • Default to K_VALUE.

WARNING: setting a size higher that K_VALUE may imply additional memory allocations.

pub fn set_kbucket_pending_timeout(&mut self, timeout: Duration) -> &mut Config

Sets the timeout duration after creation of a pending entry after which it becomes eligible for insertion into a full bucket, replacing the least-recently (dis)connected node.

  • Default to 60 s.

Trait Implementations§

§

impl Clone for Config

§

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
§

impl Debug for Config

§

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

Formats the value using the given formatter. Read more
§

impl Default for Config

§

fn default() -> Config

Returns the default configuration.

Deprecated: use Config::new instead.

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> 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>

§

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.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

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