Skip to main content

OrchestratorCoordinator

Struct OrchestratorCoordinator 

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

Orchestration coordinator holding shared backend references.

Created by crate::app::RustvelloApp or directly via Self::new for the from_backends() FFI path. All methods are &self — the coordinator is logically immutable once built.

Implementations§

Source§

impl OrchestratorCoordinator

Source

pub async fn route_call( &self, new_invocation_id: &InvocationId, call_dto: &CallDTO, cc_args: Option<&SerializedArguments>, registration_cc: ConcurrencyControlType, index_cc: bool, runner_id: &RunnerId, ) -> RustvelloResult<RouteCallResult>

Route a call: check registration CC, create or reuse an invocation, route.

Mirrors pynenc’s BaseOrchestrator.route_call():

  1. If registration_cc == Unlimited: always create a new invocation.
  2. Else: query existing REGISTERED invocations with matching CC args.
    • No match → create new.
    • Match with same call_id → reuse (return existing).
    • Match with different call_id → return ReusedDifferentCall so the caller can decide (raise error or reuse).
  3. For new invocations: register + persist + index CC + route.
Source

pub async fn reroute_invocations( &self, invocation_ids: &[InvocationId], runner_id: &RunnerId, ) -> RustvelloResult<()>

Reroute a set of invocations: transition to Rerouted, then re-enqueue.

Mirrors pynenc’s BaseOrchestrator.reroute_invocations(): For each invocation: set status REROUTED → route through broker. Invalid status transitions are silently skipped (race-safe).

Source

pub async fn trigger_loop_iteration( &self, runner_id: &RunnerId, ) -> RustvelloResult<Vec<InvocationId>>

Execute one trigger evaluation loop iteration.

Mirrors pynenc’s BaseTrigger.trigger_loop_iteration():

  1. Evaluate cron conditions (time-based).
  2. Process valid conditions → match triggers → fire.
  3. For each fired trigger: register a new invocation + route.

Returns the list of invocation IDs created by triggers.

Source

pub async fn check_atomic_services( &self, runner_id: &RunnerId, service_interval_minutes: f64, spread_margin_minutes: f64, runner_timeout_seconds: f64, ) -> RustvelloResult<Option<Vec<InvocationId>>>

Execute one atomic service check: coordination + trigger loop + recording.

Mirrors pynenc’s BaseRunner._check_atomic_services() flow:

  1. Register heartbeat for this runner (with can_run_atomic_service=true).
  2. Get active runners eligible for atomic services.
  3. Check distributed coordination algorithm (time-slot allocation).
  4. If authorized: run trigger_loop_iteration, record execution.
  5. Return None if not authorized, Some(created_ids) if ran.
Source§

impl OrchestratorCoordinator

Source

pub async fn get_invocations_to_run( &self, max_num_invocations: usize, runner_id: &RunnerId, config_for_task: &dyn Fn(&TaskId) -> Option<TaskConfig>, ) -> RustvelloResult<Vec<InvocationId>>

Retrieve invocations ready to run, handling blocking priority and CC.

  1. Prioritise blocking invocations (those with waiters)
  2. Fill remaining slots from broker queue
  3. For each candidate: check CC, set PENDING or reject/reroute
  4. Reroute CC-denied invocations at the end

config_for_task resolves the effective task config for CC decisions. Returns None when the task is unknown (CC is skipped).

Source§

impl OrchestratorCoordinator

Source

pub fn new( orchestrator: Arc<dyn Orchestrator>, state_backend: Arc<dyn StateBackend>, broker: Arc<dyn Broker>, client_data_store: Arc<ClientDataStoreManager>, trigger_manager: Option<TriggerManager>, auto_purge_hours: f64, ) -> Self

Create a new coordinator from shared backend references.

Source

pub async fn set_invocation_status( &self, invocation_id: &InvocationId, status: InvocationStatus, runner_id: &RunnerId, ) -> RustvelloResult<InvocationStatusRecord>

Atomic status transition with all side-effects, auto-resolving trigger context.

Looks up task_id and arguments from the state backend for trigger reporting. Prefer Self::set_invocation_status_with_context when the caller already has this data.

Source

pub async fn set_invocation_status_with_context( &self, invocation_id: &InvocationId, status: InvocationStatus, runner_id: &RunnerId, task_id: &TaskId, arguments: BTreeMap<String, String>, ) -> RustvelloResult<InvocationStatusRecord>

Atomic status transition with all side-effects and explicit trigger context.

  1. Atomic status transition (validates state machine)
  2. If terminal: release waiters + schedule auto-purge
  3. Record history in state backend
  4. Notify trigger system (if configured)
Source

pub async fn register_invocations( &self, invocations: &[(InvocationDTO, CallDTO)], runner_id: &RunnerId, ) -> RustvelloResult<()>

Register invocations with all side-effects.

  1. Upsert each invocation + call in state backend
  2. Register with orchestrator (sets Registered status)
  3. Record history for each
  4. Notify trigger system (if configured)
  5. Route all through broker
Source

pub async fn set_invocation_result( &self, invocation_id: &InvocationId, result: &str, runner_id: &RunnerId, ) -> RustvelloResult<()>

Store result and transition to Success, auto-resolving trigger context.

Source

pub async fn set_invocation_result_with_context( &self, invocation_id: &InvocationId, result: &str, runner_id: &RunnerId, task_id: &TaskId, arguments: BTreeMap<String, String>, ) -> RustvelloResult<()>

Store a successful result and transition to Success with explicit context.

  1. Store result in state backend
  2. Set status to Success (includes release_waiters, auto_purge, history, trigger)
  3. Notify trigger system of result (if configured)
Source

pub async fn set_invocation_exception( &self, invocation_id: &InvocationId, error_type: &str, error_message: &str, runner_id: &RunnerId, ) -> RustvelloResult<()>

Store exception and transition to Failed, auto-resolving trigger context.

Source

pub async fn set_invocation_exception_with_context( &self, invocation_id: &InvocationId, error_type: &str, error_message: &str, runner_id: &RunnerId, task_id: &TaskId, arguments: BTreeMap<String, String>, ) -> RustvelloResult<()>

Store an exception and transition to Failed with explicit context.

  1. Store error in state backend
  2. Set status to Failed (includes release_waiters, auto_purge, history, trigger)
  3. Notify trigger system of failure (if configured)
Source

pub async fn set_invocation_retry( &self, invocation_id: &InvocationId, runner_id: &RunnerId, ) -> RustvelloResult<()>

Set an invocation for retry, auto-resolving trigger context.

Source

pub async fn set_invocation_retry_with_context( &self, invocation_id: &InvocationId, runner_id: &RunnerId, task_id: &TaskId, arguments: BTreeMap<String, String>, ) -> RustvelloResult<()>

Set an invocation for retry with explicit context.

  1. Set status to Retry (via set_invocation_status_with_context)
  2. Increment retry counter
  3. Re-route through broker
Source

pub async fn get_trigger_context( &self, invocation_id: &InvocationId, ) -> (TaskId, BTreeMap<String, String>)

Look up task_id and arguments for trigger context from state backend.

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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

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

Source§

type Output = T

Should always be Self
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>,

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