pub trait SplitPlanner: Send {
// Required methods
fn fingerprint(&self) -> String;
fn plan(
&mut self,
ctx: PlanContext<'_>,
) -> Result<SplitPlan, CoordinationError>;
}Expand description
Source-provided work enumerator, run only on the fleet’s elected
leader — at job start and again on the replan interval while the plan
is Open.
Every worker presents an equivalent planner at
SplitCoordinator::start; whichever instance holds leadership uses
its own copy. plan may block on real I/O (an object-store LIST, an
index query) — backends call it off their async loop.
Required Methods§
Sourcefn fingerprint(&self) -> String
fn fingerprint(&self) -> String
Cheap, deterministic job identity, derived from configuration,
never from the enumeration itself. Every worker joining the job
must present a byte-equal fingerprint or be rejected as
Fatal — divergent configurations
can never interpret the same split table two ways.
Sourcefn plan(&mut self, ctx: PlanContext<'_>) -> Result<SplitPlan, CoordinationError>
fn plan(&mut self, ctx: PlanContext<'_>) -> Result<SplitPlan, CoordinationError>
Enumerate the current work. Idempotency contract: unchanged work
yields the same SplitIds, so re-emitting already-planned splits
is a cheap store-side no-op.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".