Skip to main content

ShuffleSender

Struct ShuffleSender 

Source
pub struct ShuffleSender { /* private fields */ }
Expand description

Lazy pool of ordered streams per peer.

Implementations§

Source§

impl ShuffleSender

Source

pub fn with_send_stall_timeout(self, timeout: Option<Duration>) -> Self

Fail a data or frontier send when one of its waits lasts timeout: the wait for the peer’s or the node’s outbound byte budget, or for a slot in the peer’s stream queue. A wait ends once the streams have drained room for one frame, so a wait that long means they stopped draining. is_shuffle_send_stalled recognises the error. Checkpoint barriers are bounded by their checkpoint deadline instead. Unset, a send waits for as long as its peer stays slow.

Source

pub fn peer_flow(&self) -> Vec<ShufflePeerFlow>

Per-peer totals, ascending by peer.

Source

pub fn outbound_budget_used_bytes(&self) -> usize

Bytes of the node’s outbound data budget held by frames being encoded or queued, including the share already granted to a send still waiting for the rest. The separate checkpoint-barrier budget is excluded.

Source§

impl ShuffleSender

Source

pub fn install_pipeline_identity_pair( &self, receiver: &ShuffleReceiver, identity: &PipelineIdentity, ) -> Result<bool>

Bind both directions of this process’s fabric to identity. A receiver refuses the handshake of a sender bound to a different identity or to none, so the first exchange fails before any frame crosses. Changing the identity cancels the streams and handshakes opened under the previous one; sequence domains stay scoped to the assignment.

§Errors

Rejects a non-canonical identity and a sender and receiver of different processes.

Source§

impl ShuffleSender

Source

pub fn topology_fence(&self) -> Option<ShuffleTopologyFence>

Logical generation retained by this endpoint, including while assignment intake is closed.

Source

pub fn topology_version(&self) -> u64

Cheap graph guard. Zero denotes the legacy fabric, never an inferred topology.

Source

pub fn install_topology_fence_pair( &self, receiver: &ShuffleReceiver, expected: Option<ShuffleTopologyFence>, target: ShuffleTopologyFence, ) -> Result<bool>

Fence both directions of one process’s fabric to an exact committed catalog generation. The trusted caller must hold intake/execution and prove predecessor retirement and Commit. This supplies no actor readiness, output permit or cluster Release.

Existing assignment locks cancel prior streams, handshakes and blocked sends before starting a new sequence domain. Identical retries preserve sequences. Process/assignment/recovery identities and unrepaired delivery-loss fences are preserved.

§Errors

Rejects stale/conflicting topology, incompatible endpoints, inactive assignments, expired process leases and unrepaired delivery loss before changing either direction.

Source

pub fn install_topology_fence_pair_for_recovery( &self, receiver: &ShuffleReceiver, expected: Option<ShuffleTopologyFence>, target: ShuffleTopologyFence, generation: u64, ) -> Result<bool>

Install held transport for an exact authorized coordinated recovery Start. The trusted caller must prove the stopped roster, selected cut and current generation. Loss covered by that generation’s prepared cutoff may remain pending during installation; this does not forgive it or authorize input/output. Only recovery completion promotes the repair floor. Later loss and an exhausted incident counter still reject installation.

§Errors

Rejects a zero/stale generation or any ordinary process, assignment and topology mismatch.

Source

pub async fn send_to_for_topology( &self, peer: ShufflePeerId, expected_assignment_version: u64, topology: Option<ShuffleTopologyFence>, message: &ShuffleMessage, ) -> Result<()>

Send under an immutable graph topology binding and exact routing assignment. Existing unbound send methods target only the legacy fabric.

§Errors

Rejects stale topology before sequence allocation, as well as ordinary send failures.

Source

pub async fn send_to_for_generation( &self, peer: ShufflePeerId, assignment_version: u64, recovery_generation: u64, topology: Option<ShuffleTopologyFence>, message: &ShuffleMessage, ) -> Result<()>

Send under the exact routing assignment, recovery generation, and graph topology. A retained pre-recovery plan cannot acquire a stream in a newer recovery generation.

§Errors

Rejects a stale generation before connection or sequence allocation, plus ordinary send errors.

Source§

impl ShuffleSender

Source

pub fn new(local_id: ShufflePeerId, incarnation: Uuid) -> Self

Empty sender; peers arrive via Self::register_peer or KV discovery.

§Panics

Panics when the node ID is zero or the process incarnation is nil.

Source

pub const fn local_id(&self) -> ShufflePeerId

Node id bound into every outbound stream handshake.

Source

pub fn install_process_lease_deadline( &self, deadline: Arc<LeaseDeadline>, ) -> Result<()>

Bind outbound admission to this process’s renewable cluster lease.

This must be installed before an assignment certificate is activated.

§Errors

Returns an error for an expired lease, a different previously installed deadline, or an already-active assignment.

Source

pub fn bind_process_lease_deadline_pair( &self, receiver: &ShuffleReceiver, deadline: Arc<LeaseDeadline>, ) -> Result<()>

Bind both directions of one local shuffle fabric to the same process lease.

Validation and installation are serialized across both handles, so an incompatible receiver cannot leave only the sender bound.

§Errors

Returns an error without changing either handle when the deadline is expired, either handle is already bound to a different deadline, or an active assignment prevents a new binding.

Source

pub fn install_assignment_fence( &self, fence: &CheckpointAssignmentFence, owners: &[ShufflePeerId], ) -> Result<bool>

Install the exact assignment certificate accepted by outbound shuffle streams. Changing scope closes all pooled streams and resets their scoped sequences.

§Errors

Returns an error for a malformed certificate, a same-version certificate conflict, or a certificate that does not bind this exact sender process.

Source

pub fn suspend_assignment_fence(&self)

Temporarily close outbound admission because the durable assignment authority could not be read. Unlike invalidation, this preserves the exact certificate and sequence counters so the same durable head can resume without manufacturing a delivery gap.

Source

pub fn invalidate_assignment_fence(&self)

Reject every stream while a newer assignment is being adopted but has not yet earned an owner-complete process certificate. The last certificate is retained only as a monotonic conflict floor; it is inactive while Self::assignment_version is zero.

Source

pub fn assignment_version(&self) -> u64

Assignment scope currently accepted for newly enqueued frames.

Source

pub fn active_assignment_digest(&self) -> Option<[u8; 32]>

Digest of the exact assignment certificate currently active for outbound streams.

Source

pub fn set_recovery_gen(&self, gen: u64)

Advance the generation stamped onto outbound data frames. Called after a coordinated rewind so peers can discard anything this node produced before it.

Source

pub fn recovery_gen(&self) -> u64

Recovery scope currently accepted for newly enqueued frames.

Source

pub const fn incarnation(&self) -> Uuid

Process incarnation bound into every outbound stream handshake.

Source

pub fn with_kv( local_id: ShufflePeerId, kv: Arc<dyn ClusterKv>, incarnation: Uuid, ) -> Self

Sender that falls back to kv discovery for peers not previously registered.

Source

pub fn register_peer(&self, peer: ShufflePeerId, addr: SocketAddr)

Register (or update) a peer’s shuffle address.

Source

pub async fn send_to( &self, peer: ShufflePeerId, msg: &ShuffleMessage, ) -> Result<()>

Send msg to peer, opening a client-streaming call if necessary.

§Errors

Returns io::Error when the peer is unregistered/undiscoverable, the endpoint cannot be built, or the per-peer stream has shut down.

Source

pub async fn send_to_for_assignment( &self, peer: ShufflePeerId, expected_assignment_version: u64, msg: &ShuffleMessage, ) -> Result<()>

Send only while the sender remains in expected_assignment_version.

Routing paths use this to prevent data sliced with an old ownership publication from entering a stream opened under a newer assignment scope.

§Errors

Returns io::Error when the expected assignment is no longer current, in addition to the errors returned by Self::send_to.

Source

pub async fn establish_assignment_mesh( &self, assignment_fence: &CheckpointAssignmentFence, ) -> Result<()>

Establish an exact-scope stream to every remote assignment participant without sending a frame or consuming a delivery sequence.

§Errors

Returns the first peer connection or handshake error after attempting the full roster.

Source

pub async fn fan_out_barrier( &self, peers: &[ShufflePeerId], barrier: CheckpointBarrier, assignment_fence: &CheckpointAssignmentFence, ) -> Result<()>

Ship barrier to every required peer. All peers are attempted, but any failure rejects the cut so the coordinator can abort promptly.

§Errors

Returns the first peer error after attempting the full fan-out.

Source

pub async fn fan_out_barrier_for_topology( &self, peers: &[ShufflePeerId], barrier: CheckpointBarrier, assignment_fence: &CheckpointAssignmentFence, topology: Option<ShuffleTopologyFence>, ) -> Result<()>

Fan out a barrier under an immutable graph topology binding.

§Errors

Rejects a different topology or any ordinary barrier/assignment/peer failure.

Trait Implementations§

Source§

impl Debug for ShuffleSender

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

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
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

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

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> LayoutRaw for T

§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
§

impl<T> Pointee for T

§

type Metadata = ()

The metadata type for pointers and references to this type.
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more