pub struct PollingDispenser {
pub metrics: Arc<PollingMetrics>,
/* private fields */
}Expand description
Wraps an inner dispenser and re-executes it until the result body is empty (zero rows). Used for awaiting conditions like SAI index compaction completing.
Configured via op params:
poll_interval_ms: delay between polls (default: 1000)timeout_ms: maximum total wait (default: 300000 = 5 min)poll_condition: when to stop: “empty” (default) = stop when 0 rowspoll_max_error_retries: how many retryable errors to swallow before propagating (default: 0 — strict: any inner error fails the poll immediately, per SRD-03 §“Status-Determination Invariant”)
Per SRD-03 §“Status-Determination Invariant”, this wrapper short-circuits on every non-positive case:
- Positive case: inner op returns
OpResultwith an empty body → poll succeeds, this dispenser returns success. - Any other case: inner op returns a non-retryable
ExecutionError, OR a retryable error past the retry limit, OR the timeout fires while non-empty bodies are still coming back → this dispenser returns the error, the activity error router sees it, and (under defaulterrors:policy) the phase + the run stop. Errors are never swallowed behind the poll.
Fields§
§metrics: Arc<PollingMetrics>Externally visible metrics for the polling operation.
Implementations§
Source§impl PollingDispenser
impl PollingDispenser
Sourcepub fn wrap(
inner: Arc<dyn OpDispenser>,
poll_interval_ms: u64,
timeout_ms: u64,
max_error_retries: u32,
metric_name: Option<String>,
min_rows: u64,
max_rows: u64,
json_path: Option<String>,
) -> (Arc<dyn OpDispenser>, Arc<PollingMetrics>)
pub fn wrap( inner: Arc<dyn OpDispenser>, poll_interval_ms: u64, timeout_ms: u64, max_error_retries: u32, metric_name: Option<String>, min_rows: u64, max_rows: u64, json_path: Option<String>, ) -> (Arc<dyn OpDispenser>, Arc<PollingMetrics>)
Wrap an inner dispenser with polling behavior. Returns the wrapped dispenser and a handle to the metrics.
metric_name: if set, the elapsed poll time is captured as a named
gauge (in seconds) for the summary report.
max_error_retries: cap on consecutive retryable inner errors
(default 0 = strict).
Trait Implementations§
Source§impl OpDispenser for PollingDispenser
impl OpDispenser for PollingDispenser
Source§fn execute<'a>(
&'a self,
cycle: u64,
ctx: &'a ExecCtx<'a>,
) -> Pin<Box<dyn Future<Output = Result<OpResult, ExecutionError>> + Send + 'a>>
fn execute<'a>( &'a self, cycle: u64, ctx: &'a ExecCtx<'a>, ) -> Pin<Box<dyn Future<Output = Result<OpResult, ExecutionError>> + Send + 'a>>
Execute an operation for the given cycle. Read more
Source§fn inner_dispenser(&self) -> Option<&dyn OpDispenser>
fn inner_dispenser(&self) -> Option<&dyn OpDispenser>
Returns the wrapped dispenser when this is a
wrapper,
None when this is a leaf (the adapter’s
base dispenser — e.g. CQL raw / prepared / batch,
HTTP, stdout, plotter, …). Read moreSource§fn describe(&self) -> Option<String>
fn describe(&self) -> Option<String>
One-line description of the op this dispenser
represents — typically the statement text /
request shape with bind-point placeholders left
unresolved (
{table}, {key}, ?, …). Read moreSource§fn describe_resolved(&self, wires: &dyn WireSource) -> Option<String>
fn describe_resolved(&self, wires: &dyn WireSource) -> Option<String>
Render the actual op the dispenser would fire for the given
cycle — the dryrun-equivalent view of the statement after
every bind point is interpolated. Read more
Source§fn canonical_kernel(&self) -> Option<&Arc<dyn Kernel>>
fn canonical_kernel(&self) -> Option<&Arc<dyn Kernel>>
SRD-68 invariant I-3 — the dispenser’s canonical Polydat Kernel,
established at construction by
map_op from its parent — the
parent itself, or a kernel bound under it. Any engine: the
executor finds the program to bind per fiber by program_id.
Returns None for dispensers that don’t own a kernel
(adapters with no Polydat needs, or wrappers that delegate to
an inner dispenser). Read moreSource§fn adapter_metrics(&self) -> Vec<(String, Labels, MetricValue)>
fn adapter_metrics(&self) -> Vec<(String, Labels, MetricValue)>
Snapshot adapter-specific metrics for inclusion in the capture
snapshot. Read more
Source§fn status_counters(&self) -> Vec<(&str, u64)>
fn status_counters(&self) -> Vec<(&str, u64)>
Adapter-specific status line entries (cumulative, non-destructive read). Read more
Source§fn rows_per_op(&self) -> usize
fn rows_per_op(&self) -> usize
The op’s uniform per-invocation cursor consumption — how many
consecutive wire ordinals one
execute call reads and covers. Read moreimpl WrappingDispenser for PollingDispenser
Auto Trait Implementations§
impl !RefUnwindSafe for PollingDispenser
impl !UnwindSafe for PollingDispenser
impl Freeze for PollingDispenser
impl Send for PollingDispenser
impl Sync for PollingDispenser
impl Unpin for PollingDispenser
impl UnsafeUnpin for PollingDispenser
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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