Skip to main content

PullWorkerOptions

Struct PullWorkerOptions 

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

Configures outbound polling for a Worker.

Pass this to WorkerOptions::pull. The Worker polls its sticky queue and each registered Flow type, runs at most max_concurrent_tasks handlers, and keeps idle_streams_per_queue waiting streams on each queue. An omitted task limit uses the CPU count; an omitted idle stream count uses one. An omitted drain timeout uses 30 seconds.

use std::sync::Arc;
use dex_sdk::{BlobCache, BlobCacheConfig, Client, ClientOptions, PullWorkerOptions,
    Registry, Worker, WorkerOptions};

let cache = Arc::new(BlobCache::open(BlobCacheConfig::new(
    "/tmp/dex-pull-blobs", 64 * 1024 * 1024, 0,
)?)?);
let registry = Registry::new();
let worker = Worker::try_new(registry.clone(), cache.clone(),
    WorkerOptions::new().pull(PullWorkerOptions::new().max_concurrent_tasks(8)))?;
let client = Client::try_new(registry, cache,
    ClientOptions::new())?;
// Run worker.start() on a dedicated thread; call worker.stop() during shutdown.

Implementations§

Source§

impl PullWorkerOptions

Source

pub fn new() -> Self

Creates pull options with CPU-count concurrency, one idle stream per queue, and a 30-second drain.

The app Worker ID is generated from process identity and eight random base32 characters.

Source

pub fn max_concurrent_tasks(self, value: usize) -> Self

Sets the maximum number of concurrent Step and RPC handlers.

The default is the available CPU count. Zero returns crate::SdkError::FlowDefinition from crate::Worker::try_new. Additional assignments are rejected at capacity.

Source

pub fn reserved_rpc_tasks(self, value: usize) -> Self

Reserves capacity to protect synchronous RPC latency from long-running Steps.

Unset reserves one slot when resolved capacity is at least two, otherwise zero. With the CPU-count default, Steps get one fewer slot than before. Set zero to opt out. With one slot and no explicit reserve, start warns once that RPCs may wait behind Steps. Flows must stay responsive because RPCs share Worker task capacity with Steps. WaitFor and Execute tasks, including local attempts, are declined when total busy handlers reach the resolved task limit minus this reserve. RPCs use the full limit. API-direct and transactional RPCs both use the full limit. Declines reassign without consuming an attempt. If all Workers remain at the Step limit through the dispatch wait, NO_WORKER_AVAILABLE consumes an attempt and follows the Step retry policy. Local attempts wait the local dispatch wait, then fall back according to their policy. Readiness is unaffected. Declines emit a tracing debug event and increment crate::Worker::pull_reserved_rpc_declines. A queue keeps one extra idle stream for 30 seconds after its last reserve decline. The Worker does not open it while all task slots are busy.

value must be less than the task limit after its CPU-count default is resolved. crate::Worker::try_new returns crate::SdkError::FlowDefinition otherwise. Returns these options with the reserve applied.

use dex_sdk::PullWorkerOptions;
let pull = PullWorkerOptions::new().max_concurrent_tasks(8).reserved_rpc_tasks(2);
Source

pub fn idle_streams_per_queue(self, value: usize) -> Self

Sets the number of waiting streams per queue.

The default is one. Zero returns crate::SdkError::FlowDefinition from crate::Worker::try_new. The Worker also retains busy streams until their tasks finish. A queue keeps one additional idle stream after a recent reserve decline. Use at least two for heavy Step backlogs.

Source

pub fn app_worker_id(self, value: impl Into<String>) -> Self

Overrides the process Worker ID used for sticky routing.

Use a new ID after each process restart. It must contain 1–63 ASCII letters, digits, dots, underscores, or hyphens and must differ from every registered Flow type. Invalid values return crate::SdkError::FlowDefinition from crate::Worker::try_new. If omitted, the Worker generates a fresh ID during construction.

Source

pub fn stop_on_permanent_stream_rejection(self, value: bool) -> Self

Stops when a permanent rejection leaves a queue without any registered stream.

Defaults to false, retrying indefinitely. When enabled, crate::Worker::start drains within the configured timeout, cancels remaining handlers, and waits for their return. It returns a service error exposing crate::SdkError::pull_registration_error before or after initial readiness. Calling crate::Worker::stop afterward remains safe.

Source

pub fn stop_drain_timeout(self, value: Duration) -> Self

Bounds graceful drain before active handlers are cancelled.

The default is 30 seconds. Zero returns crate::SdkError::FlowDefinition from crate::Worker::try_new. A busy server-directed Reconnect uses this duration to wait for server EOF after the final frame. During Stop, half-closed streams use the remaining drain deadline. crate::Worker::start waits for cancelled handlers to return before it exits.

Trait Implementations§

Source§

impl Clone for PullWorkerOptions

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PullWorkerOptions

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for PullWorkerOptions

Source§

fn default() -> Self

Returns the “default value” for a type. 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> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

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

impl<L> LayerExt<L> for L

Source§

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

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

Source§

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

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> 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 = !

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