#[non_exhaustive]pub struct S3SourceConfig {
pub url: String,
pub compression: Compression,
pub split_target_bytes: ByteSize,
pub refresh_listing: bool,
pub prefetch_bytes: ByteSize,
pub chunk_bytes: ByteSize,
pub store: BTreeMap<String, String>,
}Expand description
Configuration of an S3Source, deserialized from the pipeline’s opaque
source: { s3: ... } section.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.url: StringBucket and prefix to backfill, e.g. s3://my-bucket/exports/2026/.
Every object under the prefix is read; the planned key set is
pinned per split (see the crate docs). file:// URLs work for
infrastructure-free runs and tests.
compression: CompressionCompression codec of the objects.
split_target_bytes: ByteSizeTarget size of one split — the unit of work distribution, and the unit the leader balances. Objects are packed toward it in listing order with a per-object cost floor of a sixteenth of the target, so a split holds at most ~16 objects; an object at or above the target gets a split of its own. Part of the job fingerprint: every instance of a coordinated job must agree on it. Default 64 MiB.
refresh_listing: boolRe-list the prefix on the coordinator’s replan interval, planning
newly arrived objects as additional splits (an open plan: the
job never self-terminates). Default false: one listing, a
bounded backfill that completes.
prefetch_bytes: ByteSizePer-lane read-ahead budget: the size of each lane’s in-memory read
window. A lane fetches one window at a time as a bounded ranged GET and
drains it before fetching the next, so peak per-lane read-ahead is
~one window and total source read-ahead is
in-flight splits × prefetch_bytes (the decoded records a lane holds
while framing are a separate, smaller budget). An object at or below
this size is read in a single GET.
Keep this modest. A large window is read as one long-held GET — which
works against the connection release this source relies on — and a
single window must complete inside the client request timeout (the
store timeout option, 30s by default), so an oversized window on a
slow link degrades into repeated whole-window retries. The 8 MiB default
suits typical objects.
chunk_bytes: ByteSizeTarget size of a single buffered chunk.
store: BTreeMap<String, String>Raw object_store options, applied when building the store from
url (credentials, region, endpoint, timeouts, …). Bucket keys
are rejected — the bucket comes from url.
Implementations§
Source§impl S3SourceConfig
impl S3SourceConfig
Sourcepub fn from_component_config(
section: &ComponentConfig,
) -> Result<Self, ConfigError>
pub fn from_component_config( section: &ComponentConfig, ) -> Result<Self, ConfigError>
Deserialize and validate from the pipeline’s opaque component section.
Sourcepub fn validate(&self) -> Result<(), ConfigError>
pub fn validate(&self) -> Result<(), ConfigError>
Cross-field validation, including the passthrough denylist.
Trait Implementations§
Source§impl Clone for S3SourceConfig
impl Clone for S3SourceConfig
Source§fn clone(&self) -> S3SourceConfig
fn clone(&self) -> S3SourceConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for S3SourceConfig
impl Debug for S3SourceConfig
Source§impl<'de> Deserialize<'de> for S3SourceConfig
impl<'de> Deserialize<'de> for S3SourceConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for S3SourceConfig
impl PartialEq for S3SourceConfig
impl StructuralPartialEq for S3SourceConfig
Auto Trait Implementations§
impl Freeze for S3SourceConfig
impl RefUnwindSafe for S3SourceConfig
impl Send for S3SourceConfig
impl Sync for S3SourceConfig
impl Unpin for S3SourceConfig
impl UnsafeUnpin for S3SourceConfig
impl UnwindSafe for S3SourceConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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