pub fn batch_decision(
policy: &BatchPolicy,
budget: NonZeroUsize,
query: &BatchQuery,
) -> Result<BatchDecision, ExecError>Expand description
Decide the route for one batch on budget threads under policy.
Forced strategies are clamped (lanes <= min(items, budget),
lanes * item_threads <= budget) but never fall back.
BatchStrategy::WholeBatchVendor returns
ExecError::StrategyUnavailable when query.vendor_batch is false, before
any output write. Auto narrows the budget first (see the module docs) and
uses the original budget only for the forced strategies.
§Errors
ExecError::StrategyUnavailable for a forced WholeBatchVendor on a
route without a vendor batch call.
§Examples
use std::num::NonZeroUsize;
use tcontract_exec::batch::{batch_decision, BatchPolicy, BatchQuery, BatchStrategy};
let budget = NonZeroUsize::new(4).unwrap();
let query = BatchQuery::new(2, 1024.0);
let split = BatchPolicy::new(BatchStrategy::Split {
lanes: NonZeroUsize::new(8).unwrap(),
});
let d = batch_decision(&split, budget, &query).unwrap();
// Clamped to the items and the budget.
assert_eq!((d.lanes, d.item_threads), (2, 2));