Skip to main content

OpenSearchSink

Struct OpenSearchSink 

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

A Sink that writes directly to OpenSearch clusters over pooled HTTP.

Holds a ClusterPool per cluster, its own base URL and pooled HTTP/1.1 and HTTP/2 (prior-knowledge) clients. Each operation selects the client matching its resolved upstream Protocol (docs/04 §7), so the proxy can speak h2 to a cluster that supports it while defaulting to h1. Every dispatch is bounded by a per-request timeout so a stuck upstream fails fast (NFR-R7), and a per-cluster circuit breaker sheds a cluster that keeps failing.

Implementations§

Source§

impl OpenSearchSink

Source

pub fn new() -> Self

Builds an empty sink. Cluster pools are created on demand from the endpoint each routing target carries (the tenancy’s placement result is the source of truth for where every cluster lives); there is no static endpoint catalog.

Source

pub fn with_timeout(self, timeout: Duration) -> Self

Sets the per-request upstream timeout (builder style).

Source

pub fn with_breaker(self, failure_threshold: u32, cooldown: Duration) -> Self

Sets the circuit-breaker thresholds: open after failure_threshold consecutive failures, shed for cooldown before a half-open trial.

Source

pub fn with_clock(self, clock: Arc<dyn Clock>) -> Self

Swaps the clock the breaker reads (tests inject a ManualClock).

Source

pub fn pool_stats(&self, cluster: &ClusterId) -> Option<PoolStats>

A snapshot of a cluster’s connection-reuse counters, or None if no pool has been built for it yet. Lets operators (and tests) verify the pool is amortizing handshakes, connections opened far below requests dispatched (NFR-P; the docs/11 M4 “pool reuse rates verified” exit gate).

Source

pub fn pool_stats_all(&self) -> Vec<(ClusterId, PoolStats)>

Pool-reuse counters for every pooled cluster, paired with its id, the fleet-/agent-facing readout behind the /metrics snapshot. Order is unspecified (a HashMap walk); callers that need stability sort by id.

Trait Implementations§

Source§

impl Debug for OpenSearchSink

Source§

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

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

impl Default for OpenSearchSink

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Reader for OpenSearchSink

Source§

async fn get(&self, op: ReadOp) -> Result<ReadOutcome, SinkError>

Fetches a single document by physical id. Read more
Source§

async fn search(&self, op: SearchOp) -> Result<SearchOutcome, SinkError>

Runs a search, returning the raw hits envelope. Read more
Source§

async fn count(&self, op: SearchOp) -> Result<CountOutcome, SinkError>

Counts the documents matching a (partition-filtered) query. Read more
Source§

async fn cursor(&self, op: CursorOp) -> Result<CursorOutcome, SinkError>

Forwards a raw cursor request to its pinned cluster (scroll/PIT continue, clear, close). The default is unsupported, a sink that cannot passthrough (the in-memory test sink, a write-only queue) rejects it; OpenSearchSink overrides it with a real upstream call. Read more
Source§

async fn search_stream( &self, op: SearchOp, ) -> Result<StreamingSearch, SinkError>

Runs a search whose response streams back (ADR-014, final stage): the upstream hits envelope is piped to the engine’s hit transform without being collected, so a large response (e.g. heavy aggregations) never lands in memory. The default is unsupported; OpenSearchSink overrides it with a real streamed upstream call. Read more
Source§

async fn forward_stream( &self, op: ForwardOp, body: ByteBody, ) -> Result<StreamingForward, SinkError>

Forwards a request to a cluster with the body supplied as a stream (ADR-014 stage 2): the verbatim-passthrough path pipes the downstream body straight upstream without buffering. The default is unsupported; OpenSearchSink overrides it with a real streamed upstream call. Read more
Source§

impl Sink for OpenSearchSink

Source§

async fn write(&self, batch: WriteBatch) -> Result<WriteAck, SinkError>

Applies a batch of writes, returning a per-operation acknowledgement. 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
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, 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<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