Struct mz_compute_client::as_of_selection::Context
source · struct Context<'a, T> {
collections: BTreeMap<GlobalId, Collection<'a, T>>,
storage_collections: &'a dyn StorageCollections<Timestamp = T>,
current_time: T,
}
Expand description
The as-of selection context.
Fields§
§collections: BTreeMap<GlobalId, Collection<'a, T>>
§storage_collections: &'a dyn StorageCollections<Timestamp = T>
§current_time: T
Implementations§
source§impl<'a, T: TimestampManipulation> Context<'a, T>
impl<'a, T: TimestampManipulation> Context<'a, T>
sourcefn new(
dataflows: &[DataflowDescription<Plan<T>, (), T>],
storage_collections: &'a dyn StorageCollections<Timestamp = T>,
read_policies: &'a BTreeMap<GlobalId, ReadPolicy<T>>,
current_time: T,
) -> Self
fn new( dataflows: &[DataflowDescription<Plan<T>, (), T>], storage_collections: &'a dyn StorageCollections<Timestamp = T>, read_policies: &'a BTreeMap<GlobalId, ReadPolicy<T>>, current_time: T, ) -> Self
Initializes an as-of selection context for the given dataflows
.
sourcefn expect_collection(&self, id: GlobalId) -> &Collection<'_, T>
fn expect_collection(&self, id: GlobalId) -> &Collection<'_, T>
Returns the state of the identified collection.
§Panics
Panics if the identified collection doesn’t exist.
sourcefn apply_constraint(&self, id: GlobalId, constraint: Constraint<'_, T>) -> bool
fn apply_constraint(&self, id: GlobalId, constraint: Constraint<'_, T>) -> bool
Applies the given as-of constraint to the identified collection.
Returns whether the collection’s as-of bounds where changed as a result.
sourcefn apply_upstream_storage_constraints(
&self,
storage_read_holds: &BTreeMap<GlobalId, ReadHold<T>>,
)
fn apply_upstream_storage_constraints( &self, storage_read_holds: &BTreeMap<GlobalId, ReadHold<T>>, )
Apply as-of constraints imposed by the frontiers of upstream storage collections.
A collection’s as-of must be >= the read frontier of each of its (transitive) storage inputs.
Failing to apply this constraint to a collection is an error. The affected dataflow will not be able to hydrate successfully.
sourcefn apply_downstream_storage_constraints(&self)
fn apply_downstream_storage_constraints(&self)
Apply as-of constraints imposed by the frontiers of downstream storage collections.
A collection’s as-of must be < the write frontier of the storage collection it exports to (if any) if it is non-empty, and <= the storage collection’s read frontier otherwise.
Rationale:
- A collection’s as-of must be <= the write frontier of its dependent storage collection, because we need to pick up computing the contents of storage collections where we left off previously, to avoid skipped times observable in the durable output.
- Some dataflows feeding into storage collections (specifically: continual tasks) need to be able to observe input changes at times they write to the output. If we selected the as-of to be equal to the write frontier of the output storage collection, we wouldn’t be able to produce the correct output at that frontier. Thus the selected as-of must be strictly less than the write frontier.
- As an exception to the above, if the output storage collection is empty (i.e. its write frontier is <= its read frontier), we need to allow the as-of to be equal to the read frontier. This is correct in the sense that it mirrors the timestamp selection behavior of the sequencer when it created the collection. Chances are that the sequencer chose the initial as-of (and therefore the initial read frontier of the storage collection) as the smallest possible time that can still be read from the collection inputs, so forcing the upper bound any lower than that read frontier would produce a hard constraint violation.
Failing to apply this constraint to a collection is an error. The storage collection it exports to may have times visible to readers skipped in its output, violating correctness.
sourcefn apply_warmup_constraints(&self)
fn apply_warmup_constraints(&self)
Apply as-of constraints to ensure collections can hydrate immediately.
A collection’s as-of should be < the write frontier of each of its (transitive) storage inputs.
Failing to apply this constraint is not an error. The affected dataflow will not be able to hydrate immediately, but it will be able to hydrate once its inputs have sufficiently advanced.
sourcefn apply_index_read_policy_constraints(&self)
fn apply_index_read_policy_constraints(&self)
Apply as-of constraints to ensure indexes contain historical data as requested by their associated read policies.
An index’s as-of should be <= the frontier determined by its read policy applied to its write frontier.
Failing to apply this constraint is not an error. The affected index will not contain historical times for its entire compaction window initially, but will do so once sufficient time has passed.
sourcefn apply_index_current_time_constraints(&self)
fn apply_index_current_time_constraints(&self)
Apply as-of constraints to ensure indexes are immediately readable.
An index’s as-of should be <= the current time.
Failing to apply this constraint is not an error. The affected index will not be readable immediately, but will be readable once sufficient time has passed.
sourcefn propagate_bounds_downstream(&self, bound_type: BoundType)
fn propagate_bounds_downstream(&self, bound_type: BoundType)
Propagate as-of bounds through the dependency graph, in downstream direction.
fn propagate_bounds_downstream_inner( &self, bound_type: BoundType, constraint_type: ConstraintType, changed: &mut bool, )
sourcefn propagate_bounds_upstream(&self, bound_type: BoundType)
fn propagate_bounds_upstream(&self, bound_type: BoundType)
Propagate as-of bounds through the dependency graph, in upstream direction.
fn propagate_bounds_upstream_inner( &self, bound_type: BoundType, constraint_type: ConstraintType, changed: &mut bool, )
sourcefn best_as_of(&self, id: GlobalId) -> Antichain<T>
fn best_as_of(&self, id: GlobalId) -> Antichain<T>
Selects the “best” as-of for the identified collection, based on its currently known bounds.
We simply use the upper bound here, to maximize the chances of compute reconciliation succeeding. Choosing the latest possible as-of also minimizes the amount of work the dataflow has to spend processing historical data from its sources.
sourcefn prune_sealed_persist_sinks(&mut self)
fn prune_sealed_persist_sinks(&mut self)
Removes collections that sink into sealed persist shards from the context.
The dataflows of these collections will get an empty default as-of assigned at the end of the as-of selection process, ensuring that they won’t get installed unnecessarily.
Note that it is valid to remove these collections from consideration because they don’t impose as-of constraints on other compute collections.
Auto Trait Implementations§
impl<'a, T> Freeze for Context<'a, T>where
T: Freeze,
impl<'a, T> !RefUnwindSafe for Context<'a, T>
impl<'a, T> !Send for Context<'a, T>
impl<'a, T> !Sync for Context<'a, T>
impl<'a, T> Unpin for Context<'a, T>where
T: Unpin,
impl<'a, T> !UnwindSafe for Context<'a, T>
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> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.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> 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
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign
, for types that do not implement AddAssign
.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.