Skip to main content

DaemonConfig

Struct DaemonConfig 

Source
pub struct DaemonConfig {
Show 23 fields pub claim_batch_size: usize, pub default_model_concurrency: usize, pub model_concurrency_limits: Arc<DashMap<String, usize>>, pub model_escalations: Arc<DashMap<String, ModelEscalationConfig>>, pub claim_interval_ms: u64, pub max_retries: Option<u32>, pub stop_before_deadline_ms: Option<i64>, pub backoff_ms: u64, pub backoff_factor: u64, pub max_backoff_ms: u64, pub timeout_ms: u64, pub status_log_interval_ms: Option<u64>, pub heartbeat_interval_ms: u64, pub should_retry: ShouldRetryFn, pub claim_timeout_ms: u64, pub processing_timeout_ms: u64, pub stale_daemon_threshold_ms: u64, pub unclaim_batch_size: usize, pub cancellation_poll_interval_ms: u64, pub batch_metadata_fields: Vec<String>, pub purge_interval_ms: u64, pub purge_batch_size: i64, pub purge_throttle_ms: u64,
}
Expand description

Configuration for the daemon.

Fields§

§claim_batch_size: usize

Maximum number of requests to claim in each iteration

§default_model_concurrency: usize

Default concurrency limit per model

§model_concurrency_limits: Arc<DashMap<String, usize>>

Per-model concurrency overrides (shared, can be updated dynamically)

§model_escalations: Arc<DashMap<String, ModelEscalationConfig>>

Per-model escalation configurations for SLA-based model switching Maps model name -> escalation config (e.g., “gpt-4” -> “o1-preview”) When a request is escalated, it’s routed to the escalation_model by the control layer

§claim_interval_ms: u64

How long to sleep between claim iterations

§max_retries: Option<u32>

Maximum number of retry attempts before giving up.

§stop_before_deadline_ms: Option<i64>

Stop retrying (including escalations) this many milliseconds before the batch expires.

  • Negative (e.g., -300000 = -5 min): Retry for a buffer window AFTER SLA deadline (recommended)
  • Zero: Stop exactly at SLA deadline
  • Positive: Stop BEFORE SLA deadline (terminates retryable errors within the SLA deadline, avoid!)
  • None: No deadline awareness

Default: 0 (stop retrying/escalating on SLA deadline)

§backoff_ms: u64

Base backoff duration in milliseconds (will be exponentially increased)

§backoff_factor: u64

Factor by which the backoff_ms is increased with each retry

§max_backoff_ms: u64

Maximum backoff time in milliseconds

§timeout_ms: u64

Timeout for each individual request attempt in milliseconds

§status_log_interval_ms: Option<u64>

Interval for logging daemon status (requests in flight) in milliseconds Set to None to disable periodic status logging

§heartbeat_interval_ms: u64

Interval for sending heartbeats to update daemon status in database (milliseconds)

§should_retry: ShouldRetryFn

Predicate function to determine if a response should be retried. Defaults to retrying 5xx, 429, 408, and 404 status codes.

§claim_timeout_ms: u64

Maximum time a request can stay in “claimed” state before being unclaimed and returned to pending (milliseconds). This handles daemon crashes.

§processing_timeout_ms: u64

Maximum time a request can stay in “processing” state before being unclaimed and returned to pending (milliseconds). This handles daemon crashes during execution.

§stale_daemon_threshold_ms: u64

Time after a daemon’s last heartbeat before its requests are considered orphaned and returned to pending (milliseconds). Should be significantly larger than heartbeat_interval_ms to avoid reclaiming from live daemons that are merely slow. Also reclaims from daemons explicitly marked dead. Default: 30,000 (30 seconds, 6× the default heartbeat interval).

§unclaim_batch_size: usize

Maximum number of stale requests to unclaim in a single poll cycle. Limits database load when many requests become stale simultaneously (e.g., daemon crash).

§cancellation_poll_interval_ms: u64

Interval for polling batches to perform finalization and check for cancellations (milliseconds).

This polling loop serves two purposes:

  1. Batch Finalization: Fetches active batches and triggers lazy finalization (computing completion timestamps when all requests reach terminal states)
  2. Cancellation Detection: Checks if any active batches have been cancelled and aborts their in-flight requests

Default: 5000ms (5 seconds)

§batch_metadata_fields: Vec<String>

Batch table column names to include as request headers. These values are sent as x-fusillade-batch-{column} headers with each request. Example: [“id”, “created_by”, “endpoint”] produces headers like:

  • x-fusillade-batch-id
  • x-fusillade-batch-created-by
  • x-fusillade-batch-endpoint
§purge_interval_ms: u64

Interval for running the orphaned row purge task (milliseconds). Deletes orphaned request_templates and requests whose parent file/batch has been soft-deleted, for right-to-erasure compliance. Set to 0 to disable purging. Default: 3,600,000 (1 hour).

§purge_batch_size: i64

Maximum number of orphaned rows to delete per purge iteration. Each iteration deletes up to this many requests and this many request_templates. Default: 1000.

§purge_throttle_ms: u64

Throttle delay between consecutive purge batches within a single drain cycle (milliseconds). Prevents sustained high DB load when many orphans exist. Default: 100.

Trait Implementations§

Source§

impl Clone for DaemonConfig

Source§

fn clone(&self) -> DaemonConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for DaemonConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for DaemonConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl From<&DaemonConfig> for RetryConfig

Source§

fn from(config: &DaemonConfig) -> Self

Converts to this type from the input type.
Source§

impl Serialize for DaemonConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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
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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: 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
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,