Skip to main content

ConnectionPool

Struct ConnectionPool 

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

ConnectionPool represents pool of connections to DAPI nodes.

It can be cloned and shared between threads. Cloning the pool will create a new reference to the same pool.

Implementations§

Source§

impl ConnectionPool

Source

pub fn new(capacity: usize) -> Self

Create a new pool with a given capacity. The pool will evict the least recently used item when the capacity is reached.

§Panics

Panics if the capacity is zero.

Source§

impl ConnectionPool

Source

pub fn get( &self, prefix: PoolPrefix, uri: &Uri, settings: Option<&AppliedRequestSettings>, ) -> Option<PoolItem>

Get item from the pool for the given uri and settings.

§Arguments
  • prefix - Prefix for the item in the pool. Used to distinguish between Core and Platform clients.
  • uri - URI of the node.
  • settings - Applied request settings.
Source

pub fn get_or_create<E>( &self, prefix: PoolPrefix, uri: &Uri, settings: Option<&AppliedRequestSettings>, create: impl FnOnce() -> Result<PoolItem, E>, ) -> Result<PoolItem, E>

Get value from cache or create it using provided closure. If value is already in the cache, it will be returned. If value is not in the cache, it will be created by calling create() and stored in the cache.

§Arguments
  • prefix - Prefix for the item in the pool. Used to distinguish between Core and Platform clients.
  • uri - URI of the node.
  • settings - Applied request settings.
Source

pub fn get_or_create_with_generation<E>( &self, prefix: PoolPrefix, uri: &Uri, settings: Option<&AppliedRequestSettings>, create: impl FnOnce() -> Result<PoolItem, E>, ) -> Result<(PoolItem, u64), E>

Like ConnectionPool::get_or_create, and also returns the generation the returned connection was pooled at (see ConnectionPool::generation).

The generation is read under the same lock that finds or stores the connection, so it is the returned connection’s own even when other threads replace it right afterwards.

Source

pub fn put( &self, uri: &Uri, settings: Option<&AppliedRequestSettings>, value: PoolItem, )

Put item into the pool for the given uri and settings.

Source

pub fn generation(&self) -> u64

Generation of the connection pooled most recently. Every connection put into the pool afterwards gets a higher generation.

Source

pub fn remove_uri(&self, uri: &Uri, generation: u64)

Drop every connection to uri pooled at or before generation, whatever its prefix and connection settings.

A request that misses its deadline may have been sent over a half-open connection: the network path died after the request left, and nothing on the idle channel would ever notice. Keeping it pooled would stall the next request sent to the same node, so the executor evicts it and the next request dials a fresh connection.

Connections pooled after generation stay. They were dialed after the timed-out attempt took its connection, for example by a concurrent request that already timed out on the same node and reconnected.

Trait Implementations§

Source§

impl Clone for ConnectionPool

Source§

fn clone(&self) -> ConnectionPool

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ConnectionPool

Source§

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

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

impl Default for ConnectionPool

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

Source§

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

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

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, U> IntoPlatformVersioned<U> for T
where U: FromPlatformVersioned<T>,

§

fn into_platform_versioned(self, platform_version: &PlatformVersion) -> U

Performs the conversion.
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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

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

§

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

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

fn try_from_versioned( value: U, _grove_version: &GroveVersion, ) -> Result<T, <T as TryFromVersioned<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<T, U> TryIntoPlatformVersioned<U> for T
where U: TryFromPlatformVersioned<T>,

§

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

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

fn try_into_platform_versioned( self, platform_version: &PlatformVersion, ) -> Result<U, <U as TryFromPlatformVersioned<T>>::Error>

Performs the conversion.
§

impl<T, U> TryIntoVersioned<U> for T
where U: TryFromVersioned<T>,

§

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

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

fn try_into_versioned( self, grove_version: &GroveVersion, ) -> Result<U, <U as TryFromVersioned<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