Struct PGRobustNotifier

Source
pub struct PGRobustNotifier<F> { /* private fields */ }
Expand description

Wraps a PGNotifier and reconnects upon connection loss.

This struct keeps a callback that can be use to spawn new connections to postgres. It’s called upon each time a connection is lost. All the heavy lifting is actually done by the PGNotifier struct.

Implementations§

Source§

impl<F, S, T> PGRobustNotifier<F>
where F: AsyncFn() -> PGResult<(Client, Connection<S, T>)>, S: AsyncRead + AsyncWrite + Unpin + Send + Sync + 'static, T: AsyncRead + AsyncWrite + Unpin + Send + Sync + 'static,

Source

pub async fn new(connect: F) -> PGResult<Self>

Source

pub async fn client(&mut self) -> PGResult<&PGClient>

Returns the underlying postgres client. If the connection has been closed then it is reconnected.

Note that Client::is_closed is not reliable unless we have a high frequency TPC keepalive, over which we have no control. So we actually attempt a real query each time. Taking inspiration from sqlx, we issue a comment request so that it does not show up in logs. The possibility of the connection being closed right after the ping still exist but should be handled by the caller.

The pool will keep trying to reconnect until it succeeds using exponential backoff with additional jitter.

Source

pub async fn subscribe_notify<CB>( &mut self, channel: impl Into<String>, callback: CB, ) -> PGResult<()>
where CB: Fn(&PGNotify) + Send + Sync + 'static,

Source

pub async fn subscribe_raise( &mut self, callback: impl Fn(&PGRaise) + Send + Sync + 'static, )

Source

pub async fn capture_log(&mut self) -> Option<Vec<PGRaise>>

Source

pub async fn with_captured_log<CB, Data>( &mut self, f: CB, ) -> PGResult<(Data, Vec<PGRaise>)>
where CB: AsyncFnOnce(&PGClient) -> PGResult<Data>,

Auto Trait Implementations§

§

impl<F> Freeze for PGRobustNotifier<F>
where F: Freeze,

§

impl<F> !RefUnwindSafe for PGRobustNotifier<F>

§

impl<F> Send for PGRobustNotifier<F>
where F: Send,

§

impl<F> Sync for PGRobustNotifier<F>
where F: Sync,

§

impl<F> Unpin for PGRobustNotifier<F>
where F: Unpin,

§

impl<F> !UnwindSafe for PGRobustNotifier<F>

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