Struct mz_persist_client::internal::apply::Applier

source ·
pub struct Applier<K, V, T, D> {
    pub(crate) cfg: PersistConfig,
    pub(crate) metrics: Arc<Metrics>,
    pub(crate) shard_metrics: Arc<ShardMetrics>,
    pub(crate) state_versions: Arc<StateVersions>,
    shared_states: Arc<StateCache>,
    pubsub_sender: Arc<dyn PubSubSender>,
    pub(crate) shard_id: ShardId,
    state: Arc<LockingTypedState<K, V, T, D>>,
}
Expand description

An applier of persist commands.

This struct exists mainly to allow us to very narrowly bound the surface area that directly interacts with state.

Fields§

§cfg: PersistConfig§metrics: Arc<Metrics>§shard_metrics: Arc<ShardMetrics>§state_versions: Arc<StateVersions>§shared_states: Arc<StateCache>§pubsub_sender: Arc<dyn PubSubSender>§shard_id: ShardId§state: Arc<LockingTypedState<K, V, T, D>>

Implementations§

source§

impl<K, V, T, D> Applier<K, V, T, D>
where K: Debug + Codec, V: Debug + Codec, T: Timestamp + Lattice + Codec64, D: Semigroup + Codec64,

source

pub async fn new( cfg: PersistConfig, shard_id: ShardId, metrics: Arc<Metrics>, state_versions: Arc<StateVersions>, shared_states: Arc<StateCache>, pubsub_sender: Arc<dyn PubSubSender>, diagnostics: Diagnostics, ) -> Result<Self, Box<CodecMismatch>>

source

pub fn watch(&self) -> StateWatch<K, V, T, D>

Returns a new StateWatch for changes to this Applier’s State.

source

pub async fn fetch_upper<R, F: FnMut(&Antichain<T>) -> R>(&mut self, f: F) -> R

Fetches the latest state from Consensus and passes its upper to the provided closure.

source

pub fn clone_upper(&self) -> Antichain<T>

A point-in-time read/clone of upper from the current state.

Due to sharing state with other handles, successive reads to this fn or any other may see a different version of state, even if this Applier has not explicitly fetched and updated to the latest state. Successive calls will always return values such that PartialOrder::less_equal(call1, call2) hold true.

source

pub(crate) fn upper<R, F: FnMut(SeqNo, &Antichain<T>) -> R>(&self, f: F) -> R

source

pub(crate) fn schemas<R>( &self, f: impl FnMut(SeqNo, &BTreeMap<SchemaId, EncodedSchemas>) -> R, ) -> R

source

pub(crate) fn schema_cache(&self) -> SchemaCache<K, V, T, D>

source

pub fn seqno(&self) -> SeqNo

A point-in-time read of seqno from the current state.

Due to sharing state with other handles, successive reads to this fn or any other may see a different version of state, even if this Applier has not explicitly fetched and updated to the latest state. Successive calls will always return values such that call1 <= call2 hold true.

source

pub fn seqno_since(&self) -> SeqNo

A point-in-time read of seqno_since from the current state.

Due to sharing state with other handles, successive reads to this fn or any other may see a different version of state, even if this Applier has not explicitly fetched and updated to the latest state. Successive calls will always return values such that call1 <= call2 hold true.

source

pub fn is_finalized(&self) -> bool

A point-in-time read from the current state. (We declare a shard ‘finalized’ if it’s both become an unreadable tombstone and the state itself is has been emptied out.)

Due to sharing state with other handles, successive reads to this fn or any other may see a different version of state, even if this Applier has not explicitly fetched and updated to the latest state. Once this fn returns true, it will always return true.

source

pub fn get_schema(&self, schema_id: SchemaId) -> Option<(K::Schema, V::Schema)>

source

pub fn latest_schema(&self) -> Option<(SchemaId, K::Schema, V::Schema)>

source

pub fn check_since_upper_both_empty(&self) -> Result<(), InvalidUsage<T>>

Returns whether the current’s state since and upper are both empty.

Due to sharing state with other handles, successive reads to this fn or any other may see a different version of state, even if this Applier has not explicitly fetched and updated to the latest state. Once this fn returns true, it will always return true.

source

pub fn rollups_lte_seqno(&self, seqno: SeqNo) -> Vec<(SeqNo, PartialRollupKey)>

Returns all rollups that are <= the given seqno.

Due to sharing state with other handles, successive reads to this fn or any other may see a different version of state, even if this Applier has not explicitly fetched and updated to the latest state.

source

pub fn all_fueled_merge_reqs(&self) -> Vec<FueledMergeReq<T>>

source

pub fn snapshot( &self, as_of: &Antichain<T>, ) -> Result<Vec<HollowBatch<T>>, SnapshotErr<T>>

source

pub fn all_batches(&self) -> Vec<HollowBatch<T>>

source

pub fn verify_listen( &self, as_of: &Antichain<T>, ) -> Result<Result<(), Upper<T>>, Since<T>>

source

pub fn next_listen_batch( &self, frontier: &Antichain<T>, ) -> Result<HollowBatch<T>, SeqNo>

source

pub async fn write_rollup_for_state(&self) -> Option<EncodedRollup>

source

pub async fn apply_unbatched_cmd<R, E, WorkFn: FnMut(SeqNo, &PersistConfig, &mut StateCollections<T>) -> ControlFlow<E, R>>( &mut self, cmd: &CmdMetrics, work_fn: WorkFn, ) -> Result<(SeqNo, Result<R, E>, RoutineMaintenance), Indeterminate>

source

async fn apply_unbatched_cmd_locked<R, E, WorkFn: FnMut(SeqNo, &PersistConfig, &mut StateCollections<T>) -> ControlFlow<E, R>>( state: &LockingTypedState<K, V, T, D>, cmd: &CmdMetrics, work_fn: &mut WorkFn, cfg: &PersistConfig, metrics: &Metrics, shard_metrics: &ShardMetrics, state_versions: &StateVersions, ) -> ApplyCmdResult<K, V, T, D, R, E>

source

fn compute_next_state_locked<R, E, WorkFn: FnMut(SeqNo, &PersistConfig, &mut StateCollections<T>) -> ControlFlow<E, R>>( state: &TypedState<K, V, T, D>, work_fn: &mut WorkFn, metrics: &Metrics, cmd: &CmdMetrics, cfg: &PersistConfig, ) -> Result<NextState<K, V, T, D, R>, (SeqNo, E)>

source

pub fn update_state(&mut self, new_state: TypedState<K, V, T, D>)

source

pub async fn fetch_and_update_state(&self, seqno_hint: Option<SeqNo>)

Fetches and updates to the latest state. Uses an optional hint to early-out if any more recent version of state is observed (e.g. updated by another handle), without making any calls to Consensus or Blob.

Trait Implementations§

source§

impl<K, V, T: Clone, D> Clone for Applier<K, V, T, D>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug, V: Debug, T: Debug, D: Debug> Debug for Applier<K, V, T, D>

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<K, V, T, D> Freeze for Applier<K, V, T, D>

§

impl<K, V, T, D> !RefUnwindSafe for Applier<K, V, T, D>

§

impl<K, V, T, D> Send for Applier<K, V, T, D>
where T: Send + Sync,

§

impl<K, V, T, D> Sync for Applier<K, V, T, D>
where T: Send + Sync,

§

impl<K, V, T, D> Unpin for Applier<K, V, T, D>

§

impl<K, V, T, D> !UnwindSafe for Applier<K, V, T, D>

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, U> CastInto<U> for T
where U: CastFrom<T>,

source§

fn cast_into(self) -> U

Performs the cast.
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromRef<T> for T
where T: Clone,

source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
source§

impl<T> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ProgressEventTimestamp for T
where T: Data + Debug + Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

Upcasts this ProgressEventTimestamp to Any. Read more
source§

fn type_name(&self) -> &'static str

Returns the name of the concrete type of this object. Read more
source§

impl<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<'a, S, T> Semigroup<&'a S> for T
where T: Semigroup<S>,

source§

fn plus_equals(&mut self, rhs: &&'a S)

The method of std::ops::AddAssign, for types that do not implement AddAssign.
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

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
source§

impl<T> Data for T
where T: Clone + 'static,