pub enum ComputeResponse<T = Timestamp> {
FrontierUppers(Vec<(GlobalId, Antichain<T>)>),
PeekResponse(Uuid, PeekResponse, OpenTelemetryContext),
SubscribeResponse(GlobalId, SubscribeResponse<T>),
}
Expand description
Compute protocol responses, sent by replicas to the compute controller.
Replicas send ComputeResponse
s in response to ComputeCommand
s they previously received
from the compute controller.
Variants§
FrontierUppers(Vec<(GlobalId, Antichain<T>)>)
FrontierUppers
announces the advancement of the upper frontiers of the specified compute
collections. The response contains a mapping of collection IDs to their new upper
frontiers.
Upon receiving a FrontierUppers
response, the controller may assume that the replica has
finished computing the given collections up to at least the given frontiers. It may also
assume that the replica has finished reading from the collections’ inputs up to those
frontiers.
Replicas must send FrontierUppers
responses for compute collections that are indexes or
storage sinks. Replicas must not send FrontierUppers
responses for subscribes.
Replicas must never report regressing frontiers. Specifically:
- The first frontier reported for a collection must not be less than that collection’s
initial
as_of
frontier. - Subsequent reported frontiers for a collection must not be less than any frontier reported previously for the same collection.
Replicas must send a FrontierUppers
response reporting advancement to the empty frontier
for a collection in two cases:
- The collection has advanced to the empty frontier (e.g. because its inputs have advanced to the empty frontier).
- The collection was dropped in response to an
AllowCompaction
command that advanced its read frontier to the empty frontier. (#16275)
Once a collection was reported to have been advanced to the empty upper frontier:
- It must no longer read from its inputs.
- The replica must not send further
FrontierUppers
responses for that collection.
The replica must not send FrontierUppers
responses for collections that have not
been created previously by a CreateDataflows
command or by a CreateInstance
command. An exception are FrontierUppers
responses that report the empty frontier.
(#16247)
PeekResponse(Uuid, PeekResponse, OpenTelemetryContext)
PeekResponse
reports the result of a previous Peek
command. The peek is identified by
a Uuid
that matches the command’s Peek::uuid
.
The replica must send exactly one PeekResponse
for every Peek
command it received.
If the replica did not receive a CancelPeeks
command for a peek, it must not send a
Canceled
response for that peek. If the replica did receive a CancelPeeks
command
for a peek, it may send any of the three PeekResponse
variants.
The replica must not send PeekResponse
s for peek IDs that were not previously specified
in a Peek
command.
SubscribeResponse(GlobalId, SubscribeResponse<T>)
SubscribeResponse
reports the results emitted by an active subscribe over some time
interval.
For each subscribe that was installed by a previous CreateDataflows
command, the
replica must emit Batch
responses that cover the entire time interval from the
subscribe dataflow’s as_of
until the subscribe advances to the empty frontier or is
dropped. The time intervals of consecutive Batch
es must be increasing, contiguous,
non-overlapping, and non-empty. All updates transmitted in a batch must have times within
that batch’s time interval. The upper
of the first Batch
of a subscribe must not be
less than that subscribe’s initial as_of
frontier.
The replica must send DroppedAt
responses if the subscribe was dropped in response to
an AllowCompaction
command that advanced its read frontier to the empty frontier. The
DroppedAt
frontier must be the upper frontier of the last emitted batch.
The replica must not send a DroppedAt
response if the subscribe’s upper frontier
(reported by Batch
responses) has advanced to the empty frontier (e.g. because its
inputs advanced to the empty frontier).
Once a subscribe was reported to have advanced to the empty frontier, or has been dropped:
- It must no longer read from its inputs.
- The replica must not send further
SubscribeResponse
s for that subscribe.
The replica must not send Batch
responses for subscribes that have not been
created previously by a CreateDataflows
command. The replica may send DroppedAt
responses for subscribes that have not been created previously by a CreateDataflows
command. (#16247)
Trait Implementations§
source§impl Arbitrary for ComputeResponse<Timestamp>
impl Arbitrary for ComputeResponse<Timestamp>
§type Strategy = Union<BoxedStrategy<ComputeResponse<Timestamp>>>
type Strategy = Union<BoxedStrategy<ComputeResponse<Timestamp>>>
Strategy
used to generate values of type Self
.§type Parameters = ()
type Parameters = ()
arbitrary_with
accepts for configuration
of the generated Strategy
. Parameters must implement Default
.source§fn arbitrary_with(_: Self::Parameters) -> Self::Strategy
fn arbitrary_with(_: Self::Parameters) -> Self::Strategy
source§impl<T: Clone> Clone for ComputeResponse<T>
impl<T: Clone> Clone for ComputeResponse<T>
source§fn clone(&self) -> ComputeResponse<T>
fn clone(&self) -> ComputeResponse<T>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<T: Debug> Debug for ComputeResponse<T>
impl<T: Debug> Debug for ComputeResponse<T>
source§impl<'de, T> Deserialize<'de> for ComputeResponse<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for ComputeResponse<T>where
T: Deserialize<'de>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl<T: Send> GenericClient<ComputeCommand<T>, ComputeResponse<T>> for Box<dyn ComputeClient<T>>
impl<T: Send> GenericClient<ComputeCommand<T>, ComputeResponse<T>> for Box<dyn ComputeClient<T>>
source§fn send<'life0, 'async_trait>(
&'life0 mut self,
cmd: ComputeCommand<T>
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn send<'life0, 'async_trait>(
&'life0 mut self,
cmd: ComputeCommand<T>
) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
source§impl<T: PartialEq> PartialEq<ComputeResponse<T>> for ComputeResponse<T>
impl<T: PartialEq> PartialEq<ComputeResponse<T>> for ComputeResponse<T>
source§fn eq(&self, other: &ComputeResponse<T>) -> bool
fn eq(&self, other: &ComputeResponse<T>) -> bool
self
and other
values to be equal, and is used
by ==
.source§impl<T> Partitionable<ComputeCommand<T>, ComputeResponse<T>> for (ComputeCommand<T>, ComputeResponse<T>)where
T: Timestamp + Lattice,
impl<T> Partitionable<ComputeCommand<T>, ComputeResponse<T>> for (ComputeCommand<T>, ComputeResponse<T>)where
T: Timestamp + Lattice,
§type PartitionedState = PartitionedComputeState<T>
type PartitionedState = PartitionedComputeState<T>
source§fn new(parts: usize) -> PartitionedComputeState<T>
fn new(parts: usize) -> PartitionedComputeState<T>
PartitionedState
for the command–response pair.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>>
source§impl RustType<ProtoComputeResponse> for ComputeResponse<Timestamp>
impl RustType<ProtoComputeResponse> for ComputeResponse<Timestamp>
source§fn into_proto(&self) -> ProtoComputeResponse
fn into_proto(&self) -> ProtoComputeResponse
Self
into a Proto
value.source§fn from_proto(proto: ProtoComputeResponse) -> Result<Self, TryFromProtoError>
fn from_proto(proto: ProtoComputeResponse) -> Result<Self, TryFromProtoError>
source§impl<T> Serialize for ComputeResponse<T>where
T: Serialize,
impl<T> Serialize for ComputeResponse<T>where
T: Serialize,
impl<T> StructuralPartialEq for ComputeResponse<T>
Auto Trait Implementations§
impl<T> RefUnwindSafe for ComputeResponse<T>where
T: RefUnwindSafe,
impl<T> Send for ComputeResponse<T>where
T: Send,
impl<T> Sync for ComputeResponse<T>where
T: Sync,
impl<T> Unpin for ComputeResponse<T>where
T: Unpin,
impl<T> UnwindSafe for ComputeResponse<T>where
T: UnwindSafe,
Blanket Implementations§
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
.