Skip to main content

TickBarrier

Struct TickBarrier 

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

Barrier ensuring all shards complete a phase before any proceeds.

The tick barrier coordinates the phases within each simulation tick:

  1. Sense - agents sense the substrate (read-only phase)
  2. Act - process agent actions (write phase)
  3. Decay - decay signals, traces, and edges (maintenance phase)
  4. Advance - advance tick counter (finalization phase)

Each shard must signal completion of each phase, and all shards must complete before any can proceed to the next phase.

Implementations§

Source§

impl TickBarrier

Source

pub fn new(shard_count: usize) -> Self

Create a new tick barrier for the specified number of shards.

Source

pub fn with_timeout(shard_count: usize, timeout_secs: u64) -> Self

Create a tick barrier with custom timeout.

Source

pub async fn set_shard_count(&self, count: usize)

Update the expected shard count.

This should be called when shards are added or removed from the cluster.

Source

pub async fn shard_count(&self) -> usize

Get the current shard count.

Source

pub async fn complete( &self, shard_id: ShardId, phase: TickPhase, tick: Tick, ) -> DistributedResult<()>

Mark a shard as having completed a phase.

§Arguments
  • shard_id - The shard that completed
  • phase - The phase that was completed
  • tick - The tick number
Source

pub async fn is_complete( &self, shard_id: ShardId, phase: TickPhase, tick: Tick, ) -> bool

Check if a specific shard has completed a phase.

Source

pub async fn completed_count(&self, phase: TickPhase, tick: Tick) -> usize

Get the number of shards that have completed a phase.

Source

pub async fn wait_all( &self, phase: TickPhase, tick: Tick, ) -> DistributedResult<()>

Wait for all shards to complete a phase.

This will block until all registered shards have signaled completion of the specified phase, or until the timeout is reached.

§Arguments
  • phase - The phase to wait for
  • tick - The tick number
§Errors

Returns DistributedError::PhaseTimeout if the timeout is reached before all shards complete.

Source

pub async fn wait_all_with_timeout( &self, phase: TickPhase, tick: Tick, timeout: Duration, ) -> DistributedResult<()>

Wait for all shards with custom timeout.

Source

pub async fn reset_for_tick(&self, _tick: Tick)

Reset the barrier for a new tick.

This clears all completion records. Should be called before starting a new tick.

Source

pub async fn get_completed_shards( &self, phase: TickPhase, tick: Tick, ) -> Vec<ShardId>

Get all shards that have completed a specific phase.

Source

pub async fn get_pending_shards( &self, phase: TickPhase, tick: Tick, all_shards: &[ShardId], ) -> Vec<ShardId>

Get all shards that have NOT completed a specific phase.

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

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

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

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