pub trait Source: Send {
type Lane: SourceLane;
// Required methods
fn open(&mut self, ctx: SourceCtx) -> Result<(), SourceError>;
fn poll_events(
&mut self,
timeout: Duration,
) -> Result<SourceEvent<Self::Lane>, SourceError>;
fn commit(
&mut self,
watermarks: &[(PartitionId, i64)],
) -> Result<(), SourceError>;
// Provided methods
fn component_type(&self) -> &str { ... }
fn framing_contract(&self) -> FramingContract { ... }
fn flush_commits(&mut self) -> Result<(), SourceError> { ... }
fn pause(&mut self, lanes: &[LaneId]) -> Result<(), SourceError> { ... }
fn resume(&mut self, lanes: &[LaneId]) -> Result<(), SourceError> { ... }
}Expand description
Control plane of a source. Driven by the runtime’s controller from a single thread; lanes run on pipeline threads.
Required Associated Types§
Sourcetype Lane: SourceLane
type Lane: SourceLane
The lane type this source produces.
Required Methods§
Sourcefn open(&mut self, ctx: SourceCtx) -> Result<(), SourceError>
fn open(&mut self, ctx: SourceCtx) -> Result<(), SourceError>
Connect and prepare. Called once before any other method.
Sourcefn poll_events(
&mut self,
timeout: Duration,
) -> Result<SourceEvent<Self::Lane>, SourceError>
fn poll_events( &mut self, timeout: Duration, ) -> Result<SourceEvent<Self::Lane>, SourceError>
Service control-plane work (rebalance callbacks, statistics) and
return the next event, waiting at most timeout. Must be called
regularly regardless of backpressure state.
Sourcefn commit(
&mut self,
watermarks: &[(PartitionId, i64)],
) -> Result<(), SourceError>
fn commit( &mut self, watermarks: &[(PartitionId, i64)], ) -> Result<(), SourceError>
Store per-partition committable positions (each is the offset one past the last acknowledged record). Positions are durable per the source’s own policy (e.g. interval auto-commit of stored offsets).
Provided Methods§
Sourcefn component_type(&self) -> &str
fn component_type(&self) -> &str
The component_type metric label for this source (e.g. "kafka"),
mirroring SinkParts::with_component_type
on the sink side. It is also the namespace of the source’s custom-metrics
Meter: declaring "kafka" scopes the source’s own
families under spate_kafka_source_*. The default "source" is a reserved
root, so a source that does not override this gets no custom Meter
(its framework stage metrics are unaffected).
Sourcefn framing_contract(&self) -> FramingContract
fn framing_contract(&self) -> FramingContract
How the payloads this source emits are framed, so the framework can
pair it with a deserializer without the two being coordinated by hand
(see FramingContract). A source that splits its own bytes into one
record per payload returns FramingContract::PerRecord; the default
is FramingContract::WholePayload — the source emits whole payloads
and the deserializer owns framing (Kafka, and any source that does not
frame).
Sourcefn flush_commits(&mut self) -> Result<(), SourceError>
fn flush_commits(&mut self) -> Result<(), SourceError>
Synchronously flush stored positions (shutdown, revocation).
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".