pub struct QueryBudget {
pub max_rows: u64,
pub examined: Arc<AtomicU64>,
pub cancel: CancellationToken,
pub state: Arc<AtomicU8>,
pub check_stride: u64,
}Expand description
Per-tool runtime budget. Constructed at the
crate::query::executor::QueryExecutor boundary; threaded
into crate::query::executor::graph_eval::GraphEvalContext
so evaluate_all can sample-and-check it without re-reading
env vars per call.
Clone is cheap: the inner counters are Arc-shared, so
cloning across rayon workers is a refcount bump per field.
Fields§
§max_rows: u64Maximum rows the executor may examine before tripping
cancellation. 0 is rejected at construction sites (MCP
boundary + env-var parse).
examined: Arc<AtomicU64>How many rows have actually been examined. Shared across
rayon worker threads; reset per evaluate_all call.
cancel: CancellationTokenShared cancellation token (canonical type per
00_contracts.md §3.CC-1). Tripped when
examined >= max_rows.
state: Arc<AtomicU8>First-observer-wins source tag. Written exactly once by
the first signal to cancel the shared token (either
Self::tick on budget overflow or
Self::mark_external_cancel).
check_stride: u64How often (in rows) to compare examined against
max_rows. Trades early-trip precision for fetch_add
overhead.
Implementations§
Source§impl QueryBudget
impl QueryBudget
Sourcepub fn new(max_rows: u64, cancel: CancellationToken) -> Self
pub fn new(max_rows: u64, cancel: CancellationToken) -> Self
Construct a fresh budget with max_rows and the documented
DEFAULT_CHECK_STRIDE. The supplied token is the canonical
per-request CancellationToken from Subagent A’s wrapper —
tick() calls cancel() on it when the budget trips, so
every clone of the token observes the cancellation through
the same shared Arc<AtomicBool>.
Sourcepub fn unbounded(cancel: CancellationToken) -> Self
pub fn unbounded(cancel: CancellationToken) -> Self
Construct an effectively-unbounded budget (u64::MAX rows)
for back-compat callers that have not opted into per-tool
budgeting yet. The cancellation token is still wired so
external cancel signals propagate normally.
Sourcepub fn from_per_call_or_env(
per_call_budget: Option<u64>,
cancel: CancellationToken,
) -> Self
pub fn from_per_call_or_env( per_call_budget: Option<u64>, cancel: CancellationToken, ) -> Self
Resolve the effective budget for an MCP tool call.
Priority (per C_budget.md §2):
- Per-call
budget_rowsMCP parameter (the caller can opt to a tighter or looser bound for diagnostics). - Environment-variable
SQRY_TOOL_BUDGET_ROWS. DEFAULT_BUDGET_ROWS.
0 is rejected at this boundary by mapping to the
effectively-unbounded variant — a budget of zero would
trip on the first row, which is never the operator
intent. Negative env values are similarly mapped to the
default.
Sourcepub fn exceeded(&self) -> bool
pub fn exceeded(&self) -> bool
Returns true iff the budget has been exceeded. Cheap: one
Relaxed load + comparison.
Sourcepub fn source(&self) -> CancellationSource
pub fn source(&self) -> CancellationSource
Reads the (possibly still None) cancellation source tag.
Sourcepub fn mark_external_cancel(&self) -> bool
pub fn mark_external_cancel(&self) -> bool
Tag the source as External IFF it is still None. CAS,
safe to call from any worker on observation. No-op if
Budget already won the race. Returned bool indicates
whether THIS call won the CAS (used in tests).
Sourcepub fn tick(&self) -> Result<(), BudgetExceeded>
pub fn tick(&self) -> Result<(), BudgetExceeded>
Increment by 1. Returns Err(BudgetExceeded) the first
time the post-increment count crosses max_rows.
Idempotent on subsequent crosses (so multiple rayon
workers racing past the threshold all see Err but the
cancel-once contract holds via CancellationToken::cancel’s
internal AtomicBool).
Source-tag invariant: the tag is set to Budget BEFORE
cancel.cancel() is called. This ordering means any
observer that subsequently reads
cancel.is_cancelled() == true is guaranteed to see
source() != None — the consumer side of the invariant
lives in evaluate_all’s classify_cancel block.
§Errors
Returns BudgetExceeded when the post-increment
examined count meets or exceeds max_rows.
Trait Implementations§
Source§impl Clone for QueryBudget
impl Clone for QueryBudget
Source§fn clone(&self) -> QueryBudget
fn clone(&self) -> QueryBudget
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for QueryBudget
impl RefUnwindSafe for QueryBudget
impl Send for QueryBudget
impl Sync for QueryBudget
impl Unpin for QueryBudget
impl UnsafeUnpin for QueryBudget
impl UnwindSafe for QueryBudget
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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>
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 moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more