Skip to main content

Pool

Struct Pool 

Source
pub struct Pool<C: Connection> { /* private fields */ }
Expand description

A connection pool for database connections.

The pool manages a collection of connections, reusing them across requests to avoid the overhead of establishing new connections.

§Type Parameters

  • C: The connection type, must implement Connection

§Cancellation

Pool operations respect cancellation via the Cx context:

  • acquire will return early if cancellation is requested
  • Connections are properly cleaned up on cancellation

Implementations§

Source§

impl<C: Connection> Pool<C>

Source

pub fn new(config: PoolConfig) -> Self

Create a new connection pool with the given configuration.

Source

pub fn config(&self) -> PoolConfig

Get the pool configuration.

Source

pub fn stats(&self) -> PoolStats

Get the current pool statistics.

Source

pub fn at_capacity(&self) -> bool

Check if the pool is at capacity.

Source

pub fn is_closed(&self) -> bool

Check if the pool has been closed.

Source

pub async fn acquire<F, Fut>( &self, cx: &Cx, factory: F, ) -> Outcome<PooledConnection<C>, Error>
where F: Fn() -> Fut, Fut: Future<Output = Outcome<C, Error>>,

Acquire a connection from the pool.

This method will:

  1. Return an idle connection if one is available
  2. Create a new connection if below capacity
  3. Wait for a connection to become available (up to timeout)
§Errors

Returns an error if:

  • The pool is closed
  • The acquire timeout is exceeded
  • Cancellation is requested via the Cx context
  • Connection validation fails (if test_on_checkout is enabled)
Source

pub fn clear_idle(&self)

Close all currently idle connections.

If the pool mutex is poisoned, this logs an error and leaves the idle inventory untouched because its accounting cannot be mutated safely.

Source

pub fn close(&self)

Close the pool, preventing new connections and closing all idle connections.

If the pool mutex is poisoned, this logs an error but still wakes waiters.

Source

pub async fn close_and_drain(&self, cx: &Cx) -> Outcome<(), Error>

Close the pool and wait for every pool-owned active connection to retire.

Closing admission and removing idle inventory happen synchronously before this method first yields. Blocked acquirers are woken and observe PoolErrorKind::Closed. Connections already checked out are closed when returned; this future completes only after their explicit close_for_pool hooks finish and the active count reaches zero.

The wait is cancellation- and deadline-aware through cx. Cancellation returns Outcome::Cancelled without reopening the pool: closed remains a one-way lifecycle transition, and a later caller may resume draining. Dropping this future has the same persistent-close property.

Multiple concurrent drainers are supported by the pool’s one-shot drain latch. Since pool closure is irreversible, there is no reopen generation whose notification could be confused with this drain cycle.

Driver teardown failures are sticky and fail closed: the pool still retires every accounted resource, but this and every later drainer returns Outcome::Err after the active count reaches zero.

A connection removed with PooledConnection::detach is caller-owned and is no longer part of pool accounting, so it is outside this drain guarantee.

Source

pub fn idle_count(&self) -> usize

Get the number of idle connections.

Source

pub fn active_count(&self) -> usize

Get the number of active connections.

Source

pub fn total_count(&self) -> usize

Get the total number of connections.

Trait Implementations§

Source§

impl<C: Connection> Drop for Pool<C>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl<C> Freeze for Pool<C>

§

impl<C> RefUnwindSafe for Pool<C>

§

impl<C> Send for Pool<C>

§

impl<C> Sync for Pool<C>

§

impl<C> Unpin for Pool<C>

§

impl<C> UnsafeUnpin for Pool<C>

§

impl<C> UnwindSafe for Pool<C>

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

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: NoopSpan) -> Self

Instruments this future with a span (no-op when disabled).
Source§

fn in_current_span(self) -> Self

Instruments this future with the current span (no-op when disabled).
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> 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, 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