pub struct ProfilingSink { /* private fields */ }Expand description
Wraps a sink and feeds accepted records into a shared Profiler.
Implementations§
Trait Implementations§
Source§impl Sink for ProfilingSink
impl Sink for ProfilingSink
Source§fn write_batch_partial<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Pin<Box<dyn Future<Output = Result<Vec<RowOutcome>, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write_batch_partial<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Pin<Box<dyn Future<Output = Result<Vec<RowOutcome>, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Only rows the inner sink accepted are profiled — a row that failed into the DLQ never reached the destination.
Source§fn flush<'life0, 'async_trait>(&'life0 self) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
fn flush<'life0, 'async_trait>(&'life0 self) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn batch_atomicity(&self) -> BatchAtomicity
fn batch_atomicity(&self) -> BatchAtomicity
Atomic), per-row outcomes with
nothing committed on an outer Err
(PerRow), or possibly some rows
(BestEffort, the default). Read moreSource§fn admit_page<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn admit_page<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn supports_columnar(&self) -> bool
fn supports_columnar(&self) -> bool
arrow only.arrow::RecordBatch) writes
via write_batch_columnar without first
converting to Value. Default: false. Read moreSource§fn supports_idempotent_writes(&self) -> bool
fn supports_idempotent_writes(&self) -> bool
false (at-least-once only). Read moreSource§fn sink_guarantee(&self) -> SinkGuarantee
fn sink_guarantee(&self) -> SinkGuarantee
SinkGuarantee. Read moreSource§fn capabilities(&self) -> Capabilities
fn capabilities(&self) -> Capabilities
Capabilities::of_sink); override it
to declare a capability no method expresses (how unknown fields are
treated, scoped overwrite), keeping the connector’s
ConnectorDescriptor in agreement.
Decorators must forward this.Source§fn write_batch_is_replay_safe(&self) -> bool
fn write_batch_is_replay_safe(&self) -> bool
write_batch is safe to replay
— i.e. re-sending the same page after an ambiguous failure converges
instead of duplicating rows. Default: false. Read moreSource§fn dedups_by_key(&self) -> bool
fn dedups_by_key(&self) -> bool
write_mode: upsert (or delete) with a non-empty key, so
re-applying a record with the same key converges instead of
duplicating. Default: false. Read moreSource§fn supported_write_modes(&self) -> &'static [WriteMode]
fn supported_write_modes(&self) -> &'static [WriteMode]
WriteMode::Upsert /
WriteMode::Delete. The CLI rejects a
configured mode that is not in this set at config-load time.Source§fn current_schema<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<Option<Value>>>where
Self: 'async_trait,
'life0: 'async_trait,
fn current_schema<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<Option<Value>>>where
Self: 'async_trait,
'life0: 'async_trait,
infer_schema-shaped object
({"type":"object","properties":{ <col>: <type-fragment>, … }}), or
None for a schemaless sink or a target that does not exist yet. Read moreSource§fn supports_schema_evolution(&self) -> bool
fn supports_schema_evolution(&self) -> bool
evolve_schema. Default: false. The CLI rejects
on_drift: evolve against a sink that returns false at config-load.Source§fn evolve_schema<'life0, 'life1, 'async_trait>(
&'life0 self,
evolution: &'life1 SchemaEvolution,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn evolve_schema<'life0, 'life1, 'async_trait>(
&'life0 self,
evolution: &'life1 SchemaEvolution,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
ADD COLUMN IF NOT EXISTS semantics) so concurrent runs converge. Read moreSource§fn supports_cleanup(&self) -> bool
fn supports_cleanup(&self) -> bool
false; the upsert-capable sinks override it.Source§fn supports_staged_load(&self) -> bool
fn supports_staged_load(&self) -> bool
COPY / COPY INTO / s3() table function) (#528). Default
false; warehouse sinks that honour a StagingSpec
override it. Object-safe (no args, no generics) so Box<dyn Sink> is
unaffected.Source§fn cleanup_scope<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 BTreeMap<String, Value>,
seen: &'life2 SeenKeys,
) -> Fut<'async_trait, Res<u64>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn cleanup_scope<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 BTreeMap<String, Value>,
seen: &'life2 SeenKeys,
) -> Fut<'async_trait, Res<u64>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
implement faucet_core::driver::CleanupDriver on a family driver; see RFC 0014
Source§fn last_committed_token<'life0, 'life1, 'async_trait>(
&'life0 self,
scope: &'life1 str,
) -> Fut<'async_trait, Res<Option<String>>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn last_committed_token<'life0, 'life1, 'async_trait>(
&'life0 self,
scope: &'life1 str,
) -> Fut<'async_trait, Res<Option<String>>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
implement faucet_core::driver::CommitTokenDriver on a family driver; see RFC 0014
scope, or None if this sink has
never committed under that scope. Default: None.Source§fn is_overwrite(&self) -> bool
fn is_overwrite(&self) -> bool
WriteMode::Overwrite). Read moreSource§fn begin_overwrite<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
fn begin_overwrite<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
implement faucet_core::driver::StagingDriver on a family driver; see RFC 0014
Source§fn commit_overwrite<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
fn commit_overwrite<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
implement faucet_core::driver::StagingDriver on a family driver; see RFC 0014
Source§fn supports_rollback(&self) -> bool
fn supports_rollback(&self) -> bool
rollback_run. Default false.Source§fn rollback_run<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
opts: &'life2 RollbackOptions,
) -> Fut<'async_trait, Res<RollbackOutcome>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn rollback_run<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
opts: &'life2 RollbackOptions,
) -> Fut<'async_trait, Res<RollbackOutcome>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
run_id wrote to this destination, per
opts.mode: delete the run’s rows (append), restore journaled
before-images (upsert / delete), or swap the kept previous table back
(overwrite). Must be all-or-nothing per destination where the backend
allows it, and must leave the destination untouched when opts.dry_run
is set or when conflicts block it (see
RollbackOutcome). Read moreSource§fn forget_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn forget_run<'life0, 'life1, 'async_trait>(
&'life0 self,
run_id: &'life1 str,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
run_id undoable (journal rows, a
previous table) once the run is past the retention window. Default:
no-op.Source§fn rewind_commit_token<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
token: Option<&'life2 str>,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn rewind_commit_token<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
scope: &'life1 str,
token: Option<&'life2 str>,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
scope to token (None clears
it), so a rolled-back run’s pages are not skipped on the next run.
Default: a typed “unsupported” error.Source§fn readback_source(&self) -> Option<(String, Value)>
fn readback_source(&self) -> Option<(String, Value)>
(kind, config) that reads this destination back — what
faucet verify (#701) compares the pipeline’s source against. Default
None: the user names the destination reader in verify.destination.
The config must not need a credential the sink config lacks.Source§fn abort_overwrite<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
fn abort_overwrite<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
implement faucet_core::driver::StagingDriver on a family driver; see RFC 0014
Source§fn complete_run<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
fn complete_run<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<()>>where
Self: 'async_trait,
'life0: 'async_trait,
Pipeline::run
finished successfully and uncancelled, on every transfer path
(Value, columnar, native), after the terminal flush. Read moreSource§fn overwrite_staging_exists<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<Option<bool>>>where
Self: 'async_trait,
'life0: 'async_trait,
fn overwrite_staging_exists<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Res<Option<bool>>>where
Self: 'async_trait,
'life0: 'async_trait,
implement faucet_core::driver::StagingDriver on a family driver; see RFC 0014
…__faucet_ovw table or
collection a begin_overwrite creates) exists
right now — a read-only probe used by faucet status --probe to report
staging a crashed or aborted overwrite left behind. Read moreSource§fn config_schema(&self) -> Value
fn config_schema(&self) -> Value
Source§fn connector_name(&self) -> &'static str
fn connector_name(&self) -> &'static str
connector label on metrics and the
connector attribute on spans. See Source::connector_name.Source§fn set_roundtrip_recorder(&self, recorder: Arc<RoundtripRecorder>)
fn set_roundtrip_recorder(&self, recorder: Arc<RoundtripRecorder>)
Source::set_roundtrip_recorder; defaulted to a no-op.Source§fn set_call_context(&self, ctx: CallContext)
fn set_call_context(&self, ctx: CallContext)
CallContext (#880). See
Source::set_call_context. A sink’s context never carries the run’s
cancel token — a cancelled run still flushes its sinks — nor a retry
policy: writes are retried page by page under ADR 0007. Defaulted to a
no-op; a wrapping sink forwards it.Source§fn dataset_uri(&self) -> String
fn dataset_uri(&self) -> String
Source§fn local_outputs<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Vec<LocalOutput>>where
Self: 'async_trait,
'life0: 'async_trait,
fn local_outputs<'life0, 'async_trait>(
&'life0 self,
) -> Fut<'async_trait, Vec<LocalOutput>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn check<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: &'life1 CheckContext,
) -> Fut<'async_trait, Res<CheckReport>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn check<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: &'life1 CheckContext,
) -> Fut<'async_trait, Res<CheckReport>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
faucet doctor). Read moreSource§fn write_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write_batch<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn write_batch_reported<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Pin<Box<dyn Future<Output = Result<WriteReport, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write_batch_reported<'life0, 'life1, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
) -> Pin<Box<dyn Future<Output = Result<WriteReport, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn write_governed<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
page: &'life1 GovernedPage<'life2>,
) -> Pin<Box<dyn Future<Output = Result<WriteReport, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn write_governed<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
page: &'life1 GovernedPage<'life2>,
) -> Pin<Box<dyn Future<Output = Result<WriteReport, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn write_batch_idempotent<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
scope: &'life2 str,
token: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn write_batch_idempotent<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
scope: &'life2 str,
token: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
implement faucet_core::driver::CommitTokenDriver on a family driver; see RFC 0014
Source§fn write_batch_idempotent_reported<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
scope: &'life2 str,
token: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<WriteReport, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn write_batch_idempotent_reported<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
records: &'life1 [Value],
scope: &'life2 str,
token: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<WriteReport, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
implement faucet_core::driver::CommitTokenDriver on a family driver; see RFC 0014
write_batch_idempotent with a
WriteReport: the exactly-once path
calls this, and a page whose report does not account for every row it
offered fails with FaucetError::RowsUnaccounted before its bookmark
is persisted (#879). Override it when the sink declines rows by design
inside the atomic commit (a record without a key under a skip policy)
and report them as skipped. Read moreSource§fn write_batch_columnar<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: &'life1 RecordBatch,
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write_batch_columnar<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: &'life1 RecordBatch,
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
arrow only.RecordBatch to the destination, returning the number of
rows written. Read moreSource§fn native_load_capabilities(&self) -> Vec<NativeLoadCapability>
fn native_load_capabilities(&self) -> Vec<NativeLoadCapability>
vec![] (no fast path; use write_batch). Read moreSource§fn load_native<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: NativeBatch,
scope: &'life1 str,
ctx: NativeLoadContext,
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn load_native<'life0, 'life1, 'async_trait>(
&'life0 self,
batch: NativeBatch,
scope: &'life1 str,
ctx: NativeLoadContext,
) -> Pin<Box<dyn Future<Output = Result<usize, FaucetError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl !RefUnwindSafe for ProfilingSink
impl !UnwindSafe for ProfilingSink
impl Freeze for ProfilingSink
impl Send for ProfilingSink
impl Sync for ProfilingSink
impl Unpin for ProfilingSink
impl UnsafeUnpin for ProfilingSink
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
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
Source§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request