Struct mz_compute_client::controller::ComputeController

source ·
pub struct ComputeController<T> {
Show 19 fields instances: BTreeMap<ComputeInstanceId, Instance<T>>, instance_workload_classes: Arc<Mutex<BTreeMap<ComputeInstanceId, Option<String>>>>, build_info: &'static BuildInfo, storage_collections: Arc<dyn StorageCollections<Timestamp = T>>, initialized: bool, read_only: bool, config: ComputeParameters, arrangement_exert_proportionality: u32, stashed_replica_response: Option<(ComputeInstanceId, ReplicaId, ComputeResponse<T>)>, envd_epoch: NonZeroI64, metrics: ComputeControllerMetrics, wallclock_lag: Arc<dyn Fn(&T) -> Duration>, dyncfg: Arc<ConfigSet>, response_rx: Receiver<ComputeControllerResponse<T>>, response_tx: Sender<ComputeControllerResponse<T>>, introspection_rx: Receiver<(IntrospectionType, Vec<(Row, Diff)>)>, introspection_tx: Sender<(IntrospectionType, Vec<(Row, Diff)>)>, maintenance_ticker: Interval, maintenance_scheduled: bool,
}
Expand description

A controller for the compute layer.

Fields§

§instances: BTreeMap<ComputeInstanceId, Instance<T>>§instance_workload_classes: Arc<Mutex<BTreeMap<ComputeInstanceId, Option<String>>>>

A map from an instance ID to an arbitrary string that describes the class of the workload that compute instance is running (e.g., production or staging).

§build_info: &'static BuildInfo§storage_collections: Arc<dyn StorageCollections<Timestamp = T>>

A handle providing access to storage collections.

§initialized: bool

Set to true once initialization_complete has been called.

§read_only: bool

Whether or not this controller is in read-only mode.

When in read-only mode, neither this controller nor the instances controlled by it are allowed to affect changes to external systems (largely persist).

§config: ComputeParameters

Compute configuration to apply to new instances.

§arrangement_exert_proportionality: u32

arrangement_exert_proportionality value passed to new replicas.

§stashed_replica_response: Option<(ComputeInstanceId, ReplicaId, ComputeResponse<T>)>

A replica response to be handled by the corresponding Instance on a subsequent call to ComputeController::process.

§envd_epoch: NonZeroI64

A number that increases on every environmentd restart.

§metrics: ComputeControllerMetrics

The compute controller metrics.

§wallclock_lag: Arc<dyn Fn(&T) -> Duration>

A function that compute the lag between the given time and wallclock time.

§dyncfg: Arc<ConfigSet>

Dynamic system configuration.

Updated through ComputeController::update_configuration calls and shared with all subcomponents of the compute controller.

§response_rx: Receiver<ComputeControllerResponse<T>>

Receiver for responses produced by Instances, to be delivered on subsequent calls to ComputeController::process.

§response_tx: Sender<ComputeControllerResponse<T>>

Response sender that’s passed to new Instances.

§introspection_rx: Receiver<(IntrospectionType, Vec<(Row, Diff)>)>

Receiver for introspection updates produced by Instances.

§introspection_tx: Sender<(IntrospectionType, Vec<(Row, Diff)>)>

Introspection updates sender that’s passed to new Instances.

§maintenance_ticker: Interval

Ticker for scheduling periodic maintenance work.

§maintenance_scheduled: bool

Whether maintenance work was scheduled.

Implementations§

source§

impl<T: ComputeControllerTimestamp> ComputeController<T>

source

pub fn new( build_info: &'static BuildInfo, storage_collections: Arc<dyn StorageCollections<Timestamp = T>>, envd_epoch: NonZeroI64, read_only: bool, metrics_registry: MetricsRegistry, wallclock_lag: Arc<dyn Fn(&T) -> Duration> ) -> Self

Construct a new ComputeController.

source

pub fn instance_exists(&self, id: ComputeInstanceId) -> bool

TODO(#25239): Add documentation.

source

fn instance( &self, id: ComputeInstanceId ) -> Result<&Instance<T>, InstanceMissing>

Return a reference to the indicated compute instance.

source

fn instance_mut( &mut self, id: ComputeInstanceId ) -> Result<&mut Instance<T>, InstanceMissing>

Return a mutable reference to the indicated compute instance.

source

pub fn instance_ref( &self, id: ComputeInstanceId ) -> Result<ComputeInstanceRef<'_, T>, InstanceMissing>

Return a read-only handle to the indicated compute instance.

source

pub fn collection( &self, instance_id: ComputeInstanceId, collection_id: GlobalId ) -> Result<&CollectionState<T>, CollectionLookupError>

Return a read-only handle to the indicated collection.

source

pub fn find_collection( &self, collection_id: GlobalId ) -> Result<&CollectionState<T>, CollectionLookupError>

Return a read-only handle to the indicated collection.

source

pub fn collection_reverse_dependencies( &self, instance_id: ComputeInstanceId, id: GlobalId ) -> Result<impl Iterator<Item = &GlobalId>, InstanceMissing>

List compute collections that depend on the given collection.

source

pub fn set_arrangement_exert_proportionality(&mut self, value: u32)

Set the arrangement_exert_proportionality value to be passed to new replicas.

source

pub fn clusters_hydrated(&self) -> bool

Returns true iff all collections on all clusters have been hydrated.

For this check, zero-replica clusters are always considered hydrated. Their collections would never normally be considered hydrated but it’s clearly intentional that they have no replicas.

source

pub fn collection_frontiers( &self ) -> BTreeMap<GlobalId, (Antichain<T>, Antichain<T>)>

Returns the read and write frontiers for each collection.

source

pub fn replica_write_frontiers( &self ) -> BTreeMap<(GlobalId, ReplicaId), Antichain<T>>

Returns the write frontier for each collection installed on each replica.

source

pub fn dump(&self) -> Result<Value, Error>

Returns the state of the ComputeController formatted as JSON.

The returned value is not guaranteed to be stable and may change at any point in time.

source§

impl<T> ComputeController<T>

source

pub fn create_instance( &mut self, id: ComputeInstanceId, arranged_logs: BTreeMap<LogVariant, GlobalId>, workload_class: Option<String> ) -> Result<(), InstanceExists>

Create a compute instance.

source

pub fn update_instance_workload_class( &mut self, id: ComputeInstanceId, workload_class: Option<String> ) -> Result<(), InstanceMissing>

Updates a compute instance’s workload class.

source

pub fn drop_instance(&mut self, id: ComputeInstanceId)

Remove a compute instance.

§Panics

Panics if the identified instance still has active replicas.

source

pub fn dyncfg(&self) -> &Arc<ConfigSet>

Returns the compute controller’s config set.

source

pub fn update_configuration(&mut self, config_params: ComputeParameters)

Update compute configuration.

source

pub fn initialization_complete(&mut self)

Mark the end of any initialization commands.

The implementor may wait for this method to be called before implementing prior commands, and so it is important for a user to invoke this method as soon as it is comfortable. This method can be invoked immediately, at the potential expense of performance.

source

pub fn allow_writes(&mut self)

Allow this controller and instances controller by it to write to external systems.

source

pub async fn ready(&mut self)

Wait until the controller is ready to do some processing.

This method may block for an arbitrarily long time.

When the method returns, the caller should call ComputeController::process.

This method is cancellation safe.

source

pub fn set_subscribe_target_replica( &mut self, instance_id: ComputeInstanceId, subscribe_id: GlobalId, target_replica: ReplicaId ) -> Result<(), SubscribeTargetError>

Assign a target replica to the identified subscribe.

If a subscribe has a target replica assigned, only subscribe responses sent by that replica are considered.

source

pub fn add_replica_to_instance( &mut self, instance_id: ComputeInstanceId, replica_id: ReplicaId, location: ClusterReplicaLocation, config: ComputeReplicaConfig ) -> Result<(), ReplicaCreationError>

Adds replicas of an instance.

source

pub fn drop_replica( &mut self, instance_id: ComputeInstanceId, replica_id: ReplicaId ) -> Result<(), ReplicaDropError>

Removes a replica from an instance, including its service in the orchestrator.

source

pub fn create_dataflow( &mut self, instance_id: ComputeInstanceId, dataflow: DataflowDescription<Plan<T>, (), T> ) -> Result<(), DataflowCreationError>

Create and maintain the described dataflows, and initialize state for their output.

This method creates dataflows whose inputs are still readable at the dataflow as_of frontier, and initializes the outputs as readable from that frontier onward. It installs read dependencies from the outputs to the inputs, so that the input read capabilities will be held back to the output read capabilities, ensuring that we are always able to return to a state that can serve the output read capabilities.

source

pub fn drop_collections( &mut self, instance_id: ComputeInstanceId, collection_ids: Vec<GlobalId> ) -> Result<(), CollectionUpdateError>

Drop the read capability for the given collections and allow their resources to be reclaimed.

source

pub fn peek( &mut self, instance_id: ComputeInstanceId, collection_id: GlobalId, literal_constraints: Option<Vec<Row>>, uuid: Uuid, timestamp: T, finishing: RowSetFinishing, map_filter_project: SafeMfpPlan, target_replica: Option<ReplicaId>, peek_target: PeekTarget ) -> Result<(), PeekError>

Initiate a peek request for the contents of the given collection at timestamp.

source

pub fn cancel_peek( &mut self, instance_id: ComputeInstanceId, uuid: Uuid ) -> Result<(), InstanceMissing>

Cancel an existing peek request.

Canceling a peek is best effort. The caller may see any of the following after canceling a peek request:

  • A PeekResponse::Rows indicating that the cancellation request did not take effect in time and the query succeeded.
  • A PeekResponse::Canceled affirming that the peek was canceled.
  • No PeekResponse at all.
source

pub fn set_read_policy( &mut self, instance_id: ComputeInstanceId, policies: Vec<(GlobalId, ReadPolicy<T>)> ) -> Result<(), ReadPolicyError>

Assign a read policy to specific identifiers.

The policies are assigned in the order presented, and repeated identifiers should conclude with the last policy. Changing a policy will immediately downgrade the read capability if appropriate, but it will not “recover” the read capability if the prior capability is already ahead of it.

Identifiers not present in policies retain their existing read policies.

It is an error to attempt to set a read policy for a collection that is not readable in the context of compute. At this time, only indexes are readable compute collections.

source

async fn record_introspection_updates( &mut self, storage: &mut dyn StorageController<Timestamp = T> )

source

pub async fn process( &mut self, storage: &mut dyn StorageController<Timestamp = T> ) -> Option<ComputeControllerResponse<T>>

Processes the work queued by ComputeController::ready.

source

async fn maintain(&mut self, storage: &mut dyn StorageController<Timestamp = T>)

Auto Trait Implementations§

§

impl<T> !Freeze for ComputeController<T>

§

impl<T> !RefUnwindSafe for ComputeController<T>

§

impl<T> !Send for ComputeController<T>

§

impl<T> !Sync for ComputeController<T>

§

impl<T> Unpin for ComputeController<T>
where T: Unpin,

§

impl<T> !UnwindSafe for ComputeController<T>

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> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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, U> OverrideFrom<Option<&T>> for U
where U: OverrideFrom<T>,

source§

fn override_from(self, layer: &Option<&T>) -> U

Override the configuration represented by Self with values from the given layer.
source§

impl<T> Pipe for T
where T: ?Sized,

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
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<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> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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