pub struct PartitionedComputeState<T> { /* private fields */ }
Expand description
Maintained state for partitioned compute clients.
This helper type unifies the responses of multiple partitioned workers in order to present as a single worker:
- It emits
FrontierUpper
responses reporting the minimum/meet of frontiers reported by the individual workers. - It emits
PeekResponse
s andSubscribeResponse
s reporting the union of the responses received from the workers.
In the compute communication stack, this client is instantiated several times:
- One instance on the controller side, dispatching between cluster processes.
- One instance in each cluster process, dispatching between timely worker threads.
Note that because compute commands, except CreateTimely
, are only sent to the first process,
the cluster-side instances of PartitionedComputeState
are not guaranteed to see all compute
commands. Or more specifically: The instance running inside process 0 sees all commands,
whereas the instances running inside the other processes only see CreateTimely
. The
PartitionedComputeState
implementation must be able to cope with this limited visiblity. It
does so by performing most of its state management based on observed compute responses rather
than commands.
Implementations§
source§impl<T> PartitionedComputeState<T>where
T: Timestamp,
impl<T> PartitionedComputeState<T>where T: Timestamp,
sourcepub fn observe_command(&mut self, command: &ComputeCommand<T>)
pub fn observe_command(&mut self, command: &ComputeCommand<T>)
Observes commands that move past, and prepares state for responses.
Trait Implementations§
source§impl<T: Debug> Debug for PartitionedComputeState<T>
impl<T: Debug> Debug for PartitionedComputeState<T>
source§impl<T> PartitionedState<ComputeCommand<T>, ComputeResponse<T>> for PartitionedComputeState<T>where
T: Timestamp + Lattice,
impl<T> PartitionedState<ComputeCommand<T>, ComputeResponse<T>> for PartitionedComputeState<T>where T: Timestamp + Lattice,
source§fn split_command(
&mut self,
command: ComputeCommand<T>
) -> Vec<Option<ComputeCommand<T>>>
fn split_command( &mut self, command: ComputeCommand<T> ) -> Vec<Option<ComputeCommand<T>>>
source§fn absorb_response(
&mut self,
shard_id: usize,
message: ComputeResponse<T>
) -> Option<Result<ComputeResponse<T>, Error>>
fn absorb_response( &mut self, shard_id: usize, message: ComputeResponse<T> ) -> Option<Result<ComputeResponse<T>, Error>>
Auto Trait Implementations§
impl<T> RefUnwindSafe for PartitionedComputeState<T>where T: RefUnwindSafe,
impl<T> Send for PartitionedComputeState<T>where T: Send,
impl<T> Sync for PartitionedComputeState<T>where T: Sync,
impl<T> Unpin for PartitionedComputeState<T>
impl<T> UnwindSafe for PartitionedComputeState<T>where T: RefUnwindSafe,
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> 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> 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
.