PeerConnection

Struct PeerConnection 

Source
pub struct PeerConnection {
    pub config: PeerConfig,
    /* private fields */
}
Expand description

A managed connection to a peer’s Redis.

Uses redis::aio::ConnectionManager internally, which provides:

  • Automatic reconnection on connection loss
  • Multiplexed connection (single TCP socket, multiple in-flight requests)
  • Connection pooling semantics (cloning is cheap, shares underlying connection)

Fields§

§config: PeerConfig

Peer configuration

Implementations§

Source§

impl PeerConnection

Source

pub fn new(config: PeerConfig) -> Self

Create a new peer connection (not yet connected).

Source

pub fn node_id(&self) -> &str

Get the peer’s node ID.

Source

pub fn cdc_stream_key(&self) -> String

Get the CDC stream key for this peer.

Source

pub async fn state(&self) -> PeerState

Get current connection state.

Source

pub async fn is_connected(&self) -> bool

Check if connected.

Source

pub async fn circuit_state(&self) -> PeerCircuitState

Get the current circuit breaker state.

Source

pub async fn is_circuit_open(&self) -> bool

Check if the circuit is open (should reject requests).

Source

pub async fn record_success(&self)

Record a successful operation (resets failure count).

Source

pub async fn record_failure(&self)

Record a failed operation (increments failure count, may open circuit).

Source

pub async fn connect(&self, retry_config: &RetryConfig) -> Result<()>

Connect to the peer’s Redis with retry logic.

Source

pub async fn connection(&self) -> Option<ConnectionManager>

Get the stream connection (for XREAD and other potentially blocking ops).

Returns None if not connected.

Source

pub async fn query_connection(&self) -> Option<ConnectionManager>

Get the query connection (for GET, HGET, and other fast point queries).

This is a separate connection that won’t be blocked by XREAD BLOCK on the stream connection.

Returns None if not connected.

Source

pub async fn ensure_connected(&self) -> Result<ConnectionManager>

Ensure the peer is connected, connecting lazily if needed.

This provides a convenient way to get a connection without manually calling connect() first. Uses default retry config.

§Returns

The connection manager, or an error if connection failed.

Source

pub fn failure_count(&self) -> u64

Get consecutive failure count.

Source

pub fn millis_since_success(&self) -> u64

Get milliseconds since last success.

Source

pub async fn mark_disconnected(&self)

Mark connection as failed (triggers reconnect).

Source

pub fn shutdown(&self)

Signal shutdown.

Source

pub async fn ping(&self) -> Result<Duration>

Ping the peer’s Redis to check connection health.

Returns the round-trip latency on success. Updates last_success timestamp on success.

Source

pub async fn get_merkle_root(&self) -> Result<Option<[u8; 32]>>

Get the peer’s Merkle root hash (cached with TTL).

Uses a short-lived cache to avoid hammering the peer during repair cycles. The cache is automatically invalidated after MERKLE_CACHE_TTL.

Source

pub async fn invalidate_merkle_cache(&self)

Invalidate the Merkle root cache (call after local writes).

Source

pub async fn get_merkle_children( &self, path: &str, ) -> Result<Vec<(String, [u8; 32])>>

Get children of a Merkle path (sorted by score/position).

Source

pub async fn get_item(&self, key: &str) -> Result<Option<Vec<u8>>>

Get an item’s data by key.

Returns the raw item content from the peer’s Redis. Uses JSON.GET for JSON items, GET for binary items.

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

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

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